У меня есть объектная модель инфраструктуры сущностей с двумя сущностями:
Alert (1-*) ----- (1) Check
Таблица Check
имеет уникальное ограничение для столбца UniqueProperty
.
Чеки - это, как правило, уже существующие объекты в моей базе данных, и любое новое предупреждение должно быть добавлено к существующим проверкам.
Я создаю простой граф объектов где-то в моем коде:
var alert = new Alert();
alert.Check = new Check { UniqueProperty = someValue };
Некоторое время спустя я хотел бы сохранить свой граф объектов:
using (var context = new MyContext())
{
context.Alerts.AddObject(alert);
// Replace temp check with actual database check if available.
var checkFromDb = context.Checks.SingleOrDefault(
c => c.UniqueProperty = alert.Check.UniqueProperty);
if (checkFromDb != null)
{
alert.Check = checkFromDb;
}
context.SaveChanges();
}
Итак, когда есть соответствующая проверка в базе данных, используйте ее, в противном случае ничего не делайте (и она будет просто добавлена).
Приведенный выше код вызывает уникальное нарушение ограничения для ограничения UniqueProperty
. Причина в том, что EF запоминает первую проверку, хотя позже я заменяю ее проверкой из базы данных.
Как мне избавиться от этой первой проверки?