0

我有 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);
4

2 回答 2

0

经过一番搜索(谷歌搜索),我知道我需要对内容类型的 FolderId 字段(显式创建)进行唯一约束,但 EF 目前不支持字段的唯一约束。因此,关系保持在一对多。感谢所有参与者!!!

于 2013-08-13T05:49:56.887 回答
0

尝试以下操作:

modelBuilder.Entity<Folder>()
                .HasRequired(x => x.Content)
                .WithRequiredPrincipal(); // <- this is what's different

编辑:

问题是你的继承实现——你为什么不解释你试图用你的继承策略来完成什么——我猜你希望文件夹/内容元组包含由 AbstractObjects 实体表示的完全相同的数据,但是在你的实现文件夹和内容实体将拥有自己不同的 AbstractObjects 数据副本。

如果是这种情况,您有两个选择 - 定义文件夹和内容以存在于同一个表中,并使用表拆分来定义文件夹和内容实体。您的第二个选项是在实体之间使用共享主键。

如果不是这种情况,您希望关联的文件夹和内容实体有可能具有不同的 AbstractObject 值;您应该删除 AbstractObject 实体类定义上的表注释,以便将它们的值合并到 FolderObjects 和 ContentObjects 表中。

于 2013-08-12T12:24:03.207 回答