[英]Many-to-one relationship
我有一個架構定義 ,我希望能夠自己引用。 因為我需要有關引用的元數據,所以有一個名為Associations的耦合模式。 我將Entity Framework的流暢API與數據注釋屬性結合使用。
定義:
public class Definition
{
[Key]
public int Id { get; set; }
// ...
public virtual ICollection<Association> Associations { get; set; }
}
關聯:
public class Association
{
[Key]
public int Id { get; set; }
public int TypeId { get; set; }
public int AssociatedDefinitionId { get; set; }
public int RootDefinitionId { get; set; }
public virtual AssociationType Type { get; set; }
public virtual Definition AssociatedDefinition { get; set; }
public virtual Definition RootDefinition { get; set; }
}
OnModelCreating:
modelBuilder.Entity<Association>()
.HasRequired(p => p.AssociatedDefinition)
.WithRequiredPrincipal();
modelBuilder.Entity<Association>()
.HasRequired(p => p.RootDefinition)
.WithRequiredPrincipal();
我使用MySQL作為數據庫引擎。 當我嘗試使用空關聯集合保存定義實體時,出現約束沖突:
無法添加或更新子行:外鍵約束失敗(“ u0228621_8”。“定義”,CONSTRAINT“ FK_Definitions_Associations_Id” FOREIGN KEY(“ Id”)參考“ Associations”(“ Id”))
我究竟做錯了什么?
由於WithRequiredPrincipal
似乎不是您想要的,因此您已將所有關系定義為“ required:required”的關聯類。 由於Associations
收集出現(從評論)是由根定義的關系,映射應該來自定義,就像這樣:
// Foreign key mappings included.
modelBuilder.Entity<Definition>().HasMany(d => d.Assocations)
.WithRequired(a => a.RootDefinition).HasForeignKey(a => a.RootDefinitionId);
modelBuilder.Entity<Association>().HasRequired(a => a.AssociatedDefinition)
.HasForeignKey(a => a.AssociatedDefinitionId);
因此, Associations
集合可能為空,但是每個Association
需要RootDefinition
和AssociatedDefinition
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.