我不得不承认,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。换句话说:如果您删除一种货币,相应的国家也会被删除。但就我而言,这不是我想要的。
为了禁用 CASCADE DELETE,我在 FluentAPI 中提出了一些代码:
modelBuilder.Entity<Country>()
.HasRequired(cou => cou.Currency)
.WithOptional()
.WillCascadeOnDelete(false);
我认为这意味着:每个国家都需要一种货币。并且这种货币可能分配了零个、一个或多个国家/地区(可选)。并且每当我删除一种货币时,相应的国家(如果有的话)将不会被级联删除。
令人惊讶的是,如果我删除相应的货币,给定的方法仍然会级联删除一个国家/地区。谁能告诉我我想念什么?