【发布时间】:2011-03-23 09:13:45
【问题描述】:
我不得不承认,EF 4.1 RC Codefirst、DataAnnotations 和 FluentAPI 的特性对我来说仍然是压倒性的。有时我真的不知道自己在做什么;-) 请查看以下 POCO:
public class Country
{
[Key]
public Guid ID { get; set; }
[Required]
public virtual Currency Currency { get; set; }
}
public class Currency
{
[Key]
public Guid ID { get; set; }
public virtual ICollection<Country> Countries { get; set; }
}
总体思路:每个国家都需要有一种货币。但是货币根本不需要分配给一个国家/地区。
如果让 EF 创建对应的数据库,则按照约定将关系设置为 CASCADE DELETE。换句话说:如果您删除一种货币,相应的国家也会被删除。但就我而言,这 不是 我想要的。
我在 FluentAPI 中编写了一些代码来禁用 CASCADE DELETE:
modelBuilder.Entity<Country>()
.HasRequired(cou => cou.Currency)
.WithOptional()
.WillCascadeOnDelete(false);
我认为这意味着:每个国家都需要一种货币。并且这种货币可能分配了零个、一个或多个国家/地区(可选)。并且每当我删除一种货币时,相应的国家(如果有的话)都不会被级联删除。
令人惊讶的是,如果我删除相应的货币,给定的方法仍然会级联删除一个国家/地区。谁能告诉我我想念什么?
【问题讨论】:
标签: ef-code-first cascading-deletes entity-framework-4.1 fluent-interface