web-dev-qa-db-ja.com

Entity Framework7コードファーストでの1対1の関係

データ注釈またはFluentApiを使用して、Entity Framework 7コードで1対1またはZeroOrOne対1の関係を最初に構成するにはどうすればよいですか?

11
Ruben Perez

以下のように、Entity Framework7のFluentAPIを使用してOneToOne関係を定義できます。

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<BlogImage> BlogImages { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasOne(p => p.BlogImage)
            .WithOne(i => i.Blog)
            .HasForeignKey<BlogImage>(b => b.BlogForeignKey);
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public BlogImage BlogImage { get; set; }
}

public class BlogImage
{
    public int BlogImageId { get; set; }
    public byte[] Image { get; set; }
    public string Caption { get; set; }

    public int BlogForeignKey { get; set; }
    public Blog Blog { get; set; }
}
26
Sangram More

上記の答えは絶対に正しいです。

読者情報のためだけに:これは 公式ドキュメント でうまく説明されています

1対1

1対1の関係には、両側に参照ナビゲーションプロパティがあります。これらは1対多の関係と同じ規則に従いますが、各プリンシパルに1つの依存関係のみが関連付けられるように、外部キープロパティに一意のインデックスが導入されます。

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public BlogImage BlogImage { get; set; }
}

public class BlogImage
{
    public int BlogImageId { get; set; }
    public byte[] Image { get; set; }
    public string Caption { get; set; }

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

EFは、外部キープロパティを検出する能力に基づいて、依存するエンティティの1つを選択します。依存するエンティティとして間違ったエンティティが選択された場合は、FluentAPIを使用してこれを修正できます。

4
immirza