[英]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.