Есть ли способ определить, не был ли объект LINQ еще не вставлен в базу данных (новый) или был изменен с момента последнего обновления (грязный)? Я планирую привязать свой пользовательский интерфейс к объектам LINQ (используя WPF), и мне нужно, чтобы он вел себя по-разному в зависимости от того, находится ли объект уже в базе данных.
MyDataContext context = new MyDataContext();
MyObject obj;
if (new Random().NextDouble() > .5)
obj = new MyObject();
else
obj = context.MyObjects.First();
// How can I distinguish these two cases?
Единственное простое решение, которое я могу придумать, состоит в том, чтобы установить первичный ключ новых записей в отрицательное значение (мои PK являются полем идентификации и, следовательно, будут установлены в положительное целое число на INSERT
). Это будет работать только для обнаружения новых записей. Это также требует идентификаторов PK и контроля кода, создающего новый объект.
Есть ли лучший способ сделать это? Похоже, что LINQ должен внутренне отслеживать состояние этих объектов, чтобы он мог знать, что делать на context.SubmitChanges()
. Есть ли способ получить доступ к этому «состоянию объекта»?
Разъяснение
Видимо, мой первоначальный вопрос сбивал с толку. Я не ищу способ вставки или обновления записей. Я ищу способ, учитывая любой объект LINQ, чтобы определить, был ли этот объект не был вставлен (новый) или был изменен с момента его последнего обновления (грязный).