繁体   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