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