Код-первая ссылка один-ко-многим
У меня есть следующие две таблицы:
Локализация
Id int
Text string
Закусочная
Id int
Name string
Description string
Name_LocalizationID int
Description_LocationID int
Теперь я хочу, чтобы мой POCO был таким:
public class Diner{
public int Id{get;set;}
public ICollection<Localization> NameLocalization{get;set;}
public ICollection<Localization> DescriptionLocalization{get;set;}
}
public class Localization{
public int Id{get;set;}
public string Text{get;set;}
}
Вопрос: Как мы можем сопоставить свойство NameLocalization и DescriptionLocalization с идентификатором локализации с помощью API EF Fluent? Спасибо
2 ответа:
SQL Server не поддерживает несколько каскадных удалений, поэтому вам нужно сделать одну из ваших ассоциаций необязательной для получения схемы SQL Server из вашей объектной модели:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Diner>() .HasRequired(diner => diner.NameLocalization) .WithMany() .IsIndependent() .Map(s => { s.MapKey(localization => localization.Id, "NameLocalizationID"); }); modelBuilder.Entity<Diner>() .HasOptional(diner => diner.DescriptionLocalization) .WithMany() .IsIndependent() .Map(s => { s.MapKey(localization => localization.Id, "DescriptionLocationID"); }); }
Боюсь, я не тестировал этот код, но, возможно, что-то вроде:
modelBuilder.Entity<Diner>() .HasRequired(diner => diner.NameLocalization) .WithMany().IsIndependent() .Map(s => { s.MapKey(localization => localization.Id, "Name_LocalizationID"); }); modelBuilder.Entity<Diner>() .HasRequired(diner => diner.DescriptionLocalization) .WithMany().IsIndependent() .Map(s => { s.MapKey(localization => localization.Id, "Description_LocationID"); });