我是EF6和流畅的API的新手,但我在尝试打扰你之前尝试了所有可能性,但我现在有点困惑。
我有以下型号:
public class Event
{
public int Id { get; set; }
[Required]
public string Label { get; set; }
}
public class Address
{
public int Id { get; set; }
[Required]
public String City { get; set; }
}
这就是我想要做的事情:
Address
Person
)。因此,它不应该直接绑定到Event
类Event
(或Person
)时,我想级联并删除已关联的Address
我通过查看文档并在网上搜索,尝试了Fluent API中的许多可能性。尽管如此,我仍然遇到各种各样的问题:冲突的多重性,模型不一致或者无法在删除时级联。
有人可以帮忙吗?我真的被卡住了! :)
谢谢!
!!! UPDATE !!! 根据要求,这是我能找到的最佳解决方案:
public class Event
{
public int Id { get; set; }
[Required]
public string Label { get; set; }
[Required]
public virtual Address.Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
[Required]
public String City { get; set; }
}
流畅的代码如下:
modelBuilder.Entity<Event>()
.HasRequired(e => e.Address)
.WithOptional()
.Map(e => e.MapKey("AddressId"))
.WillCascadeOnDelete(true);
此实现将Event表中的外键添加到Address表中。但是,删除级联将按以下方向工作:删除地址将删除事件。不幸的是,我试图完成相反的事情:我希望仅在事件发生时删除地址!
再次感谢你:)
答案 0 :(得分:0)
你的要求互相争斗。
Address
为Event
时,Event
必须删除Address
时,Address
必须是<{> em>外国人指的是。)Address
,则其他班级应引用Address
,这会使Person
成为校长。还有另一种选择。 Event
可以有两个外键,Address
和Event
。但这不是很吸引人,因为密钥必须都可以为空,并且没有数据库约束来强制它们是互斥的。
另一种方法是使Person
成为复杂类型,因此Addresses
和Event
表都将包含所有地址列。当然这没有很好地规范化,你不能将Address
作为单独的实体来处理,但至少没有级联问题,因为地址是{{1}}记录的一部分。
我认为你最好的选择是让几个类引用{{1}}并编写逻辑来删除孤立地址。