簡體   English   中英

多對一關系

[英]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需要RootDefinitionAssociatedDefinition

暫無
暫無

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

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