5

Ho un problema davvero fastidioso in cui ogni volta che provo ad aggiungere una migrazione al mio progetto, dotnet si arresta in modo anomalo e la migrazione non viene creata. Ciò accade indipendentemente dal fatto che io usi dotnet ef migrations add o Add-Migration. Il comando inizia a funzionare e la compilazione si verifica se necessario, quindi si arresta in modo anomalo con StackOverflowException. Debug produce le seguenti informazioni:"dotnet ha smesso di funzionare" StackOverflowException quando si aggiunge la migrazione del database

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

Inoltre non importa se il mio contesto ha una Dbset i cui oggetti hanno una proprietà int o tutti gli oggetti con le loro proprietà e le collezioni complesse, eccetera. L'unico caso in cui posso generare una migrazione e un'istantanea è se il mio contesto non ha DbSet.

Ho provato sia la versione preliminare e versione di rilascio di .NET Core, sia la completa disinstallazione di .NET Core SDK (poiché erano ancora installate vecchie versioni) e Visual Studio e reinstallandole.

Sto usando Visual Studio Enterprise 2.015,3 su Windows 10 Pro e la mia classe del modello è qui sotto:

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

e il mio contesto è la seguente:

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

    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 

    } 

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

e la mia configurazione del servizio:

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

My project.json, come richiesto:

{ 
    "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

Può inviare project.json e sperare che ogni riferimento sia corretto. – Anuraj

+0

@Anuraj L'ho aggiunto al post. – Ceshion

+0

Strano. Funziona senza problemi nel mio sistema. Sto usando l'app Web ASP.NET generata da Yoman. Cambiare solo Sto usando una stringa di connessione hard coded che leggere da config. Spero tu stia usando la versione 1.0.0-preview2-003121 di dotnet.exe. – Anuraj

risposta

0

Penso di aver capito. Mentre ho ridotto il mio codice a una sola raccolta con una proprietà, non l'ho salvato prima di eseguire Add-Migration, quindi utilizzava ancora più del modello. Quello che stava usando si presentava così:

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; } 
} 

e

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; } 
} 

, che ha infatti un riferimento circolare. Non so perché non ci ho pensato, anche se penso che sia un po 'strano che il caso non venga gestito, specialmente perché questo sembra un modo logico per stabilire una relazione uno-a-uno. Ripensandoci però, mi ricordo di non usare l'attributo ForeignKey sul lato indipendente, proprio come funziona EF.