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