我是EF6和fluent 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中尝试了许多可能性。尽管如此,我仍然遇到各种问题:多重性冲突,模型不一致或无法在删除时级联。
有人可以帮忙吗?我真的被卡住了!:)
谢谢!
!!!更新!!! 根据要求,这是我能找到的最佳解决方案:
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);
此实现将事件表中的外键添加到地址表中。但是,级联删除操作将按以下方向进行:删除地址将删除事件。不幸的是,我试图做到相反:我希望仅在事件发生时才删除地址!
再次感谢你 :)
您的要求相互冲突。
Address
应当删除当Event
是时,Event
必须是委托人(实体到其中外国指)。Address
,则其他类应引用Address
,从而成为Address
主体。还有一种选择。Address
可以有两个外键toPerson
和to Event
。但这并不是很吸引人,因为键必须都可以为空,并且没有数据库约束来强制要求它们是互斥的。
另一种选择是制作Address
一个复杂的类型,因此Event
和Person
表都将具有所有地址列。当然,这还没有很好地规范化,您不能Addresses
作为单独的实体来处理,但是至少没有级联问题,因为地址是Event
记录的一部分。
我认为您最好的选择是让多个类引用Address
并编写逻辑以删除孤立地址。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句