Должен признаться, возможности 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);
Я думал, что это означает: каждой стране нужна валюта. И этой валюте может быть назначено ноль, одна или несколько стран (необязательно). И всякий раз, когда я удаляю валюту, соответствующие страны (если они есть) НЕ будут удалены каскадом.
Удивительно, но данный подход по-прежнему будет каскадно удалять страну, если я удалю соответствующую валюту. Может ли кто-нибудь сказать мне, что мне не хватает?