我在将外键设置为引用三个可能实体之一的实体时遇到问题。课程如下:
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
的外键。
答案 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