我有2个继承相同抽象类的实体。 如何组织这些实体之间的一对一关系?
[Table("AbstractObjects")]
public abstract class AbstractObject{
public Guid Id{get;set;}
public string Name{get;set;}
public DateTime CreateDate{get;set;}
}
[Table("FolderObjects")]
public class Folder:AbstractObject{
public virtual Content Content{get;set;}
}
[Table("ContentObjects")]
public class Content:AbstractObject{
public virtual Folder Folder{get;set;}
}
标准解决方案工作不正常,它会产生一对多的关系
modelBuilder.Entity<Folder>()
.HasRequired(x => x.Content)
.WithRequiredDependent(c => c.Folder);
答案 0 :(得分:0)
尝试以下方法:
modelBuilder.Entity<Folder>()
.HasRequired(x => x.Content)
.WithRequiredPrincipal(); // <- this is what's different
编辑:
问题在于您的继承实现 - 为什么不解释您尝试使用继承策略完成的任务 - 我猜您希望文件夹/内容元组包含由AbstractObjects实体表示的完全相同的数据,但在您的实现中,文件夹和内容实体将拥有自己的AbstractObjects数据的不同副本。
如果是这种情况,您有两个选项 - 定义文件夹和内容以生活在同一个表中,并使用table splitting来定义文件夹和内容实体。您的第二个选择是在实体之间使用shared primary keys。
如果不是这种情况,您希望关联的文件夹和内容实体可以具有不同的AbstractObject值;您应该删除AbstractObject实体类定义上的表注释,以便将它们的值合并到FolderObjects和ContentObjects表中。
答案 1 :(得分:0)
在一些seaches(谷歌搜索)之后,我得到我需要对Content类型的FolderId字段(显式创建)的唯一约束,但是EF现在不支持字段的唯一约束。因此,这种关系保持一对多。感谢所有参与者!!!