簡體   English   中英

實體框架代碼優先導航問題

[英]Entity Framework Code First navigation issue

我正在嘗試設置一個導航屬性,該屬性將容納另一個表的零個或多個元素。 實體框架似乎存在的問題是另一個表具有復合主鍵。

public class Alpha
{
    public int Id { get; set; }
    public int? BetaId { get; set; }
    public virtual ICollection<Beta> Beta { get; set; }
    public string Name { get; set; }
}

public class Beta
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int SequenceNumber { get; set; }
    public string Name { get; set; }
}

public class ABContext : DbContext
{
    public DbSet<Alpha> Alpha { get; set; }
    public DbSet<Beta> Beta { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Beta>()
            .HasKey(b => new { b.Id, b.SequenceNumber });
    }
}

我不確定如何正確建立關系。 我嘗試了幾種不同的方法。 實體框架要么抱怨沒有使用Beta類中的兩個鍵來定義導航屬性,要么抱怨在Alphas表中創建一對額外的列,這些列無法正確鏈接表。

目標是Alpha應該基於Beta.Id持有一組零個或多個Beta.Id Beta可能屬於零個或多個Alpha。 但是,我對Beta與Alpha關系並不真正感興趣。

有任何想法嗎?

因此,讓我們看一下您的要求:

Alpha應該擁有零個或多個Beta的集合...。Beta可能屬於零個或多個Alpha

這是多對多關系,因此您必須進行映射。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Beta>()
        .HasKey(b => new { b.Id, b.SequenceNumber });

    modelBuilder.Entity<Alpha>()
        .HasMany(a => a.Beta)
        .WithMany();
}

這將在數​​據庫中創建帶有trhee列(可能稱為Alpha_Id,Beta_Id和Beta_SequenceNumber)的其他表。

我仍然不理解, 基於Beta.Id意味着什么。 如果alpha只能保存具有相同Beta.Id的記錄,則可能必須在應用程序邏輯中對此進行控制。 這需要通過映射來實施其他復雜的構造。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM