实体框架多个一对一的关系

时间:2015-04-24 06:08:51

标签: c# entity-framework ef-code-first entity-framework-6

我在将外键设置为引用三个可能实体之一的实体时遇到问题。课程如下:

public class Target
{
    public int Id { get; set; }
    public int? AttachmentId { get; set; }
    public virtual Attachment Attachment { get; set; }
}
public class SubTarget
{
    public int Id { get; set; }
    public int? AttachmentId { get; set; }
    public virtual Attachment Attachment { get; set; }
}
public class Procedure
{
    public int Id { get; set; }
    public int? AttachmentId { get; set; }
    public virtual Attachment Attachment { get; set; }
}
public class Attachment
{
    public int Id { get; set; }
    public int? TargetId { get; set; }
    public int? SubTargetId { get; set; }
    public int? ProcedureId { get; set; }
    public virtual Target Target { get; set; }
    public virtual SubTarget SubTarget { get; set; }
    public virtual Procedure Procedure { get; set; }
}

因此,三个第一类中的每一个都可能有Attachment,也可能没有Attachment,每个Attachment可以且必须引用三个第一类中的一个。
首先:是否可以像这样设置外键?
其次:如何通过代码优先迁移实现目标? 使用当前设置,我得到一个错误,指出“无法确定外键关系的主要结束”,并通过注释掉Target类中的虚拟属性,这种关系似乎会倒退,即。 Attachment有一个引用textbox 66 Total rows count:2 id name 1 san 2 jd 的外键。

1 个答案:

答案 0 :(得分:1)

如果要在EF中建立一对一关系,请将此注释添加到Target,SubTarget和Procedure类中:

[Key, ForeignKey("Attachments")]
public int Id {get;set;}

这将使主键与外键相同。 然后从这3个类中删除:

 public int? AttachmendId {get;set;}

希望你能得到这份工作。我经常经常与一对一的关系挣扎,所以我基本上会将我的表设计为一对一或一对多。  如果您需要有关一对一关系的更多信息:请查看此处 Entity framework multiple one-to-one relations