Я пытаюсь понять и доверять EF. У меня есть база данных со столами, и я пытаюсь реплицировать большую часть структуры EF
Code-First
Технология как упражнение, чтобы практиковать их основы.Несколько циклов DataAnnotation ForeignKeys или несколько каскадных путей Исключение
Все мои классы имеют «Hb» в качестве префикса в своих именах. Я хочу написать ссылки на объекты для других классов без «Hb» в имени свойства.
Я следовать инструкциям этого site
Первая причина реализации исключений, как:
Вводя ограничение внешнего ключа «FK_Common.HbZipcode_Common.HbCountry_CountryId» на столе «HbZipcode» может привести к циклов или нескольких каскадных путей. Указать DEL DELETE NO ACTION или ON UPDATE NO ACTION или изменить другие ограничения FOREIGN KEY . Не удалось создать ограничение или индекс. См. Предыдущие ошибок.
[Required, ForeignKey("Country")]
public int CountryId { get; set; }
public virtual HbCountry Country { get; set; }
[Required, ForeignKey("State")]
public int StateId { get; set; }
public virtual HbState State { get; set; }
[Required, ForeignKey("City")]
public int CityId { get; set; }
public virtual HbCity City { get; set; }
// This Foreignkey never throw exception
[ForeignKey("Neighborhood")]
public int? NeighborhoodId { get; set; }
public virtual HbNeighborhood Neighborhood { get; set; }
я делаю что-то неправильно, и я не могу видеть.
Если бы кто-нибудь мог мне помочь, было бы хорошо.
Edit:
После нанесения раствора, принятый plushpuffin, все прошло, как ожидалось.
Вот код:
var modelConfig = dbModelBuilder.Entity<HbZipcode>();
modelConfig
.HasRequired(zc => zc.Country)
.WithMany(c => c.Zipcodes)
.HasForeignKey(zc => zc.CountryId)
.WillCascadeOnDelete(false);
modelConfig
.HasRequired(zc => zc.State)
.WithMany(s => s.Zipcodes)
.HasForeignKey(zc => zc.StateId)
.WillCascadeOnDelete(false);
modelConfig
.HasOptional(zc => zc.Neighborhood)
.WithMany(n => n.Zipcodes)
.HasForeignKey(zc => zc.NeighborhoodId)
.WillCascadeOnDelete(false);
Delete cascade
на HbZipcode
сейчас происходит только тогда, когда HbCity
удаляется
Я искажены направление удаления.Удаляется HbNeighborhood (и т. Д.), Который будет каскадировать удаление до HbZipCode. Извини за это. – plushpuffin
Итак, я думаю, что рекомендуется удалить все ограничения «CASCADE» и явное обновление и удаление объектов на данный момент ... правильно? –
Возможно, вам понадобится сохранить один набор триггеров с удалением каскада на самом прямом пути. Все зависит от ваших потребностей. – plushpuffin