今天发布的帖子:
Entity framework one to zero or one relationship without navigation property
Understanding ForeignKey attribute in entity framework code first
我现在正在尝试配置以下关系:
Item1具有可选的RawData Item2具有可选的RawData Item3具有可选的RawData
RawData必须附加到Item1,Item2或Item3上 - 它不会单独存在。
目前的结构是:
class ItemX
{
[Key]
public int Id { get; set; }
public int? RawDataId { get; set; }
[ForeignKey("RawDataId")]
public virtual RawData RawData { get; set; }
}
public class RawData
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
//other properties
}
我认为可以使用以下方式配置:
modelBuilder.Entity<Item1>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true);
modelBuilder.Entity<Item2>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true);
modelBuilder.Entity<Item3>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true);
但是这给出了以下错误:
类型'Item1'上的属性'RawData'上的ForeignKeyAttribute不是 有效。在依赖项上找不到外键名称“RawDataId” 输入'RawData'。
这与我今天早些时候发布的帖子中的错误相同。在那个我理解它由于共享主键而无法工作的原因。但是在这个例子中情况并非如此,因为RawData不能与Item1共享主键,因为Item2可能具有相同的id。
感谢您的帮助。
修改
我已经使用它了:
modelBuilder.Entity<Item1>().HasOptional(d => d.RawData).WithMany().HasForeignKey(d=>d.RawDataId).WillCascadeOnDelete(true);
//etc.
数据库看起来不错。看起来有点奇怪,虽然描述为WithMany但也许这就是当多重关系时需要的东西?
答案 0 :(得分:0)
您需要在RawDataclass中包含Item1,Item2和Item3:
public class RawData
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public virtual Item1 i1 {get;set;}
public virtual Item2 i2 {get;set;}
public virtual Item3 i3 {get;set;}
//other properties
}