Entity Framework/.Net 4.0:POCO и сохранение отношений «многие к одному»

StackOverflow https://stackoverflow.com/questions/1631533

  •  06-07-2019
  •  | 
  •  

Вопрос

Как мне настроить свойство, чтобы при использовании SaveChanges сохранялось отношение «многие к одному», и я не получал:Оператор INSERT конфликтует с ограничением FOREIGN KEY...ошибка.

Довольно просто: у меня есть объявление и тип объявления, где для одного типа объявления имеется множество объявлений.В объявлении есть недвижимость:

public class Ad
{
   public Int32 AdTypeId { get; set; }
   public virtual AdType AdType { get; set; }
}

Чтобы осветить эти отношения.

Когда я это делаю:

someAd.AdType = someAdType;

Свойство настроено нормально, а AdTypeId — нет.Не беспокойтесь, поскольку я предполагаю, что это можно сохранить.

context.SaveChanges();

Проблема в том, что на данный момент он пытается сохранить значение 0 в столбце AdTypeId (вызывая проблему с внешним ключом) вместо использования присвоенного объекту свойства AdType, чтобы выяснить, что ему следует вставить в столбец AdTypeId.

Вещи, которые я знаю:

  • На этом этапе Someadtype сохраняется/имеет удостоверение личности.
  • Свойство AdType установлено правильно.
  • AdTypeId равен 0.
  • В базе данных существует связь по внешнему ключу.
  • AdTypeId — это первичный ключ.
  • У меня для отложенной/ленивой загрузки установлено значение true

На самом деле я не пробовал менять AdType, поскольку он настроен на отложенную загрузку.

Это было полезно?

Решение

Похоже, ок, потому что я использую не прокси (придумал это слово...Ага) При подходе «Отслеживание изменений на основе моментальных снимков» система понятия не имеет, что она изменилась.

В этом примере клиент является чистым типом Poco.В отличие от EntityObject или IPOCO, основанных на IPOCO, внесение изменений в сущность не будет автоматически поддерживать синхронизацию штата, потому что между вашими объектами POCO нет автоматического уведомления.Следовательно, после запроса государственного менеджера он считает, что состояние объекта клиента неизменно, хотя мы явно внесли изменение в одно из свойств на сущности.

Получил это отсюда

Поэтому, чтобы убедиться, что он знает, произошло ли изменение, я должен использовать ПринятьВсеИзмененияПослеСохранить с помощью метода SaveChanges.

context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

И это работает.Надеюсь, я правильно понял...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top