由于 FK 限制,我在尝试删除记录时遇到了问题。因此,我回到了绘图板,并试图指定这种关系应该如何运作。
这是我的代码第一类:
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; }
}
public class DeferredData
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
//other properties
}
我希望实现的是 MemberDataSet 有零个或一个 DeferredData。我可以从 MemberDataSet 访问 DeferredData,但 DeferredData 不需要返回到 MemberDataSet 的导航属性。 DeferredData 应严格要求 MemberDataSet。因此,在理想的情况下,删除 MemberDataSet 将删除已分配的 DeferredData。
在我看来,我想要指定的是:
modelBuilder.Entity<MemberDataSet>().HasOptional(d => d.DeferredData).WithRequired().WillCascadeOnDelete(true);
即 MemberDataSet 有一个选项 DeferredData,但 DeferredData 有一个必需的 MemberDataSet,并且此关系应该在删除时级联。
但是,我收到一个错误:
类型“MemberDataSet”上的属性“DeferredData”上的ForeignKeyAttribute 无效。在依赖类型“DeferredData”上找不到外键名称“DeferredDataId”。名称值应该是逗号分隔的外键属性名称列表。
Edit
在对 Sam 下面的回答感到满意后,我继续更改了其他一些外键属性。 MemberDataSet 还有另一个名为 SignedOffBy 的属性,它是一个 userProfile。以前看起来像这样:
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; }
public int? SignedOffById { get; set; }
[ForeignKey("SignedOffId")]
public virtual UserProfile SignedOffBy { get; set; }
}
在下面讨论了foreignkey属性的实际作用之后,我将其更改为:
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; }
public int? SignedOffById { get; set; }
[ForeignKey("UserId")]
public virtual UserProfile SignedOffBy { get; set; }
}
但是,我现在收到一条非常相似的错误消息:
The ForeignKeyAttribute on property 'SignedOffBy' on type 'MemberDataSet' is not valid. The foreign key name 'UserId' was not found on the dependent type 'MemberDataSet'. The Name value should be a comma separated list of foreign key property names.
这里的区别在于,这种关系是多对一的,即 1 个用户可以拥有多个签核数据集。这是造成差异的原因吗?即,UserProfile 现在是主要对象,因此foreignkey 位于MemberDataSet 上?
再次非常感谢您提供的所有帮助。