5

Mam naprawdę irytujący problem, za każdym razem, gdy próbuję dodać migrację do mojego projektu, kropka wywala się i migracja nie jest tworzona. Dzieje się tak niezależnie od tego, czy używam dotnet ef migrations add czy Add-Migration. Polecenie zaczyna się uruchamiać i kompilacja pojawia się w razie potrzeby, a następnie ulega awarii z wyjątkiem StackOverflowException. Debugowanie daje następujące informacje:"DotNET przestał działać" Wyjątek StackOverflowException podczas dodawania migracji bazy danych

Unhandled exception at 0x00007FFF798C97DE (coreclr.dll) in dotnet.exe: 0xC00000FD: Stack overflow (parameters: 0x0000000000000001, 0x000000AC03A75FF8). 

To również nie ma znaczenia, czy mój kontekst ma jeden Dbset której obiekty mają jedną właściwość int lub wszystkie obiekty o ich właściwościach i złożonych zbiorów i tak dalej. Jedynym przypadkiem, w którym mogę wygenerować migrację i migawkę, jest to, że mój kontekst nie zawiera DbSet.

Próbowałem zarówno wersji wstępnej, jak i wersji .NET Core, a także całkowicie odinstalowałem .NET Core SDK (ponieważ były jeszcze stare wersje) i Visual Studio i ponownie je instalowałem.

Używam Visual Studio Enterprise 2015.3 na systemie Windows 10 Pro i mojej klasie modelu jest poniżej:

public class Player 
{ 
    [Key] 
    public int PlayerID { get; set; } 
} 

i mój kontekst jest następujący:

public class LeagueContext : DbContext 
{ 
    public LeagueContext(DbContextOptions<LeagueContext> context) : base(context) 
    { 

    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 

    } 

    public virtual DbSet<Player> Players { get; set; } 
} 

i moja konfiguracja usługi:

services.AddEntityFrameworkSqlServer().AddDbContext<LeagueContext>(config => 
     { 
      config.UseSqlServer(Configuration["ConnectionStrings:LeagueContext"]); 
     }); 

Mój project.json, na żądanie:

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.0", 
     "type": "platform" 
    }, 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0", 
    "Microsoft.AspNetCore.Mvc": "1.0.0", 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview2-final", 
     "type": "build" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", 
    "Microsoft.AspNetCore.StaticFiles": "1.0.0", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Logging": "1.0.0", 
    "Microsoft.Extensions.Logging.Console": "1.0.0", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0", 
    "Microsoft.EntityFrameworkCore": "1.0.0", 
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0", 
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", 
    "Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final" 
    }, 

    "tools": { 
    "BundlerMinifier.Core": "2.0.238", 
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final", 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final", 
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final" 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ 
     "dotnet5.6", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "Areas/**/Views", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "prepublish": [ "bower install", "dotnet bundle" ], 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    } 
} 
+1

Może opublikować project.json i mieć nadzieję, że każdy odnośnik jest właściwy. – Anuraj

+0

@Anuraj Dodałem go do postu. – Ceshion

+0

Dziwne. Działa bez żadnych problemów w moim systemie. Korzystam z aplikacji ASP.NET Web generowanej przez Yoman. Zmieniaj tylko używam ciąg znaków z zakodowanymi ciągami niż czytanie z config. Mam nadzieję, że używasz wersji 1.0.0-preview2-003121 dotnet.exe. – Anuraj

Odpowiedz

0

Myślę, że to wymyśliłem. Chociaż ograniczyłem kod do jednej kolekcji z jedną właściwością, nie zapisałem jej przed uruchomieniem Add-Migration, więc nadal korzystałem z większej ilości modelu. Co to był za pomocą wyglądał następująco:

public class Player 
{ 
    [Key] 
    public int PlayerID { get; set; } 

    public int OrganizationID { get; set; } 

    public int CurrentTeamID { get; set; } 

    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public DateTime JoinDate { get; set; } 

    [ForeignKey("PlayerID")] 
    public virtual PlayerAccount Account { get; set; } 

    //[ForeignKey("PlayerID")] 
    //public virtual PlayerCareer Career { get; set; } 

    //[ForeignKey("PlayerID")] 
    //public virtual PlayerInfo Info { get; set; } 
} 

i

public class PlayerAccount 
{ 
    [Key] 
    public int PlayerID { get; set; } 

    public string Category { get; set; } 

    public bool LeagueEmails { get; set; } 

    public bool GameReminders { get; set; } 

    [ForeignKey("PlayerID")] 
    public virtual Player Player { get; set; } 
} 

który rzeczywiście ma okrągły odniesienia. Nie wiem, dlaczego o tym nie myślałem, choć myślę, że to trochę dziwne, że sprawa nie jest rozpatrywana, zwłaszcza że wydaje się to logicznym sposobem na nawiązanie relacji jeden-do-jednego. Myśląc jednak, pamiętam, aby nie używać atrybutu ForeignKey po stronie niezależnej, tylko jak działa EF.

Powiązane problemy