EF 7アルファに外部キーを追加する方法

entity-framework-core

質問

EF 7 alpha3で1対1の関係を作るにはどうすればいいですか?

ナビゲーションプロパティを定義する古い方法は機能せず、以前使用されたHasRequired / HasOptionalメソッドはmodelBuilderにはありません。

誰かがそれについていくつかの光を当てることができますか?

受け入れられた回答

最近まで、リレーションシップを定義するためのモデルビルダーAPIはありませんでした。代わりに、基礎となるmodelBuilder.Modelオブジェクトを操作する必要があります。ここでは、一対多の関係の例を示します。

class Blog
{
    public Blog()
    {
        Posts = new List<Post>();
    }

    public int Id { get; set; }

    public ICollection<Post> Posts { get; set; }
}

class Post
{
    public int Id { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Post>().ForeignKeys(x => x.ForeignKey<Blog>(p => p.BlogId));

        var model = builder.Model;
        var blog = model.GetEntityType(typeof(Blog));
        var post = model.GetEntityType(typeof(Post));
        var fk = post.ForeignKeys.Single(k => k.ReferencedEntityType == blog);
        blog.AddNavigation(new Navigation(fk, "Posts", pointsToPrincipal: false));
        post.AddNavigation(new Navigation(fk, "Blog", pointsToPrincipal: true));
    }
}

これらのAPIがどのように見えるかを考えている現在の(2014-07-31現在)について詳しく読むことができます。最終結果は次のようになります。

modelBuilder.Entity<Blog>()
    .OneToMany(b => b.Posts, p => p.Blog).ForeignKey(b => b.BlogId);

人気のある回答

EF7ベータ7では、エンティティ間の関係を定義するための新しい一連のメソッドが導入されています。

1対多の関係のために、

modelBuilder.Entity<Post>()
   .Reference(typeof(Blog), "Blog")
   .InverseCollection("Posts")
   .ForeignKey(new string[] { "BlogId" });

Entity PostからBlogへの.Reference(typeof(Blog), "Blog")関係が設定されています。最初の引き数は、ポストターゲットと2番目の引き数がナビゲーションプロパティの名前であるエンティティのタイプです。

.InverseCollection("Posts")では、1 .InverseCollection("Posts")関係が設定されます。この関数の不具合は、ナビゲーションコレクションの名前です。

.ForeignKey(new string[] { "BlogId" }) 、外部キーが設定されます。この外部キーが設定されていない場合、シャドウ外部キーが自動的に生成されます。



Related

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