"dotnetが動作を停止しました" StackOverflowException - データベースの移行を追加するとき

asp.net-core c# entity-framework-core visual-studio-2015

質問

私は、プロジェクトにマイグレーションを追加しようとするたびに、ドットネットがクラッシュし、マイグレーションが作成されないという、本当に厄介な問題を抱えています。これは、私がdotnet ef migrations addを使用するかdotnet ef migrations addまたはAdd-Migrationを使用するかにかかわらず発生します。コマンドが実行を開始し、必要に応じてコンパイルが行われた後、StackOverflowExceptionでクラッシュします。デバッグすると、次の情報が得られます。

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

私のコンテキストに、オブジェクトが1つのintプロパティを持つ1つのDbset、または複雑なプロパティとコレクションを持つすべてのオブジェクトを持つかどうかは関係ありません。マイグレーションとスナップショットを生成できる唯一のケースは、自分のコンテキストにDbSetsがない場合です。

私は.NETコアのプレリリース版とリリース版の両方を試しています。また、.NET Core SDK(旧バージョンがまだインストールされていたので)とVisual Studioを完全にアンインストールして再インストールしました。

私はWindows 10 Pro上でVisual Studio Enterprise 2015.3を使用しています。私のモデルクラスは以下の通りです:

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

私の状況は以下の通りです:

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

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {

    }

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

私のサービス構成:

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

私のproject.json、要求通り:

{
  "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つのプロパティを持つ1つのコレクションだけにコードをカットしていましたが、Add-Migrationを実行する前にコードを保存していないので、まだモデルの多くを使用していました。使用していたものは次のようになりました。

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

そして

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

実際には循環参照があります。私はなぜそれが考えられなかったのか分かりませんが、1対1の関係を設定する論理的な方法のように思えるのは、ちょっと奇妙だと思います。しかし、私は独立した側でForeignKey属性を使用しないことを覚えています。EFの仕組みだけです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ