我有一个架构 Definitions ,我希望能够引用它自己。由于我需要有关引用的元数据,因此有一个名为 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”)参考 “协会”(“Id”))
我做错了什么?
答案 0 :(得分:0)
您已经定义了您的关联类,所有关系都是&#34;必需的:必需&#34;因为WithRequiredPrincipal
似乎不是你想要的。由于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
。