У меня есть Entity Framework объектная модель с двумя объектами:Заменить объект модель свойства со значением из базы данных
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 запоминает первую проверку, хотя я позже ее заменяю проверкой из базы данных.
Как я могу избавиться от первой проверки?
Хм, это определенно решит проблему, но мне нужно «Проверить» в «Alert» с самого начала. Созданный объект-объект - это объектная модель для мастера, которая может занять несколько минут. Только в конце я могу сохранить весь график. –
@ RonaldWildenberg, то единственное, что я могу предложить, это то, что вы получите его в начале, если оно существует. – tvanfosson
Это также может быть проблемой, потому что приложение является многопользовательским. Проверки, которые существуют в момент запуска одного мастера, могут быть не такими же проверками, которые существуют, когда мастер заканчивается, потому что другой пользователь может вызвать больше проверок, которые будут созданы ... –