两个实体之间的一对一关系,这两个实体都继承自同一抽象类
本文关键字:两个 实体 继承 抽象类 一对一 之间 关系 | 更新日期: 2023-09-27 18:27:23
我有两个实体继承了相同的抽象类。如何组织实体之间的一对一关系?
[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);
尝试以下操作:
modelBuilder.Entity<Folder>()
.HasRequired(x => x.Content)
.WithRequiredPrincipal(); // <- this is what's different
编辑:
问题是你的继承实现-为什么不解释一下你试图用继承策略实现什么-我猜你希望文件夹/内容元组包含与AbstractObjects实体表示的数据完全相同的数据,但在你的实现中,文件夹和内容实体将有自己独特的AbstractObject数据副本。
如果是这种情况,您有两个选项-将"文件夹"answers"内容"定义为位于同一个表中,并使用表拆分来定义"文件夹"实体和"内容》实体。第二种选择是在实体之间使用共享主键。
如果不是这样,您希望关联的Folder和Content实体有可能具有不同的AbstractObject值;您应该删除AbstractObject实体类定义上的表注释,以便将它们的值合并到FolderObjects和ContentObjects表中。
经过一些搜索(谷歌搜索),我发现我需要对Content类型的FolderId字段(显式创建)进行唯一约束,但EF目前不支持字段的唯一约束。因此,这种关系是一对多的。感谢所有参与者!!!