有关背景信息,请参阅以下帖子:
我一直认为这ForeignKey用于显示类中哪个属性持有确定导航属性的ForeignKey,例如
public class MemberDataSet
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? DeferredDataId { get; set; }
[ForeignKey("DeferredDataId")]
public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,我在链接的帖子上发现这是不对的,因为DeferredData的主键被称为Id我实际需要:
public class MemberDataSet
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? DeferredDataId { get; set; }
[ForeignKey("Id")]
public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
即ForeignKey用于指向其他类.
然后我继续改变其他一些参考文献:
public class MemberDataSet
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { …Run Code Online (Sandbox Code Playgroud) c# entity-framework foreign-keys code-first shared-primary-key
我有一个父实体和一个子实体。
在数据库中,父级的主键是p_p_id
,子级中的外键是相同的p_p_id
数据库中没有外键约束。
实体具有在各自的类中设置的指向彼此的属性。
家长班
public virtual ChildProject ThisChildProject { get; set; }
Run Code Online (Sandbox Code Playgroud)
儿童班
public virtual ParentProject ThisParentProjection { get; set; }
Run Code Online (Sandbox Code Playgroud)
这些属性或任何一个类的Id上都没有注释。
在配置中,我尝试在子级中进行映射。
HasRequired(i => i.ThisParentProject).WithOptional(o => o.ThisChildProject );
Run Code Online (Sandbox Code Playgroud)
发生的情况是EF尝试使用子级的主键和父级的主键进行映射。
但是我想在子级和父级的主键中使用定义的FK