2015-12-06 3 views
1

У меня есть ниже упрощенный C# код для обновления записи с идентификатором «1» с методами CodeFluent:Update CodeFluent Force Базу данных Запись

CFEObject anObject = new CFEObject(); 
anObject.ID = 1; //ID is the primary key, and an Identity Column 
anObject.Name = "New Name"; 
anObject.Save(); 

Проблема с выше кода он не обновляется объект с идентификатором 1. Вместо этого он получает следующий идентификатор и создает новую запись, а не редактирует существующую запись.

Я понимаю, что загрузка объекта CFE с помощью метода «LoadById» решила бы вышеупомянутую проблему, но я не могу использовать это, поскольку у меня нет идентификатора до тех пор, пока значения уже не будут установлены. Поэтому, когда я использую «LoadById», он удаляет мои существующие свойства набора.

Как я могу заставить его обновить запись ДОВСЕ с идентификатором «1» без использования метода LoadById?

+0

Если свойство является тождественным, то его может установить только слой db. Это не проблема CodeFluent. Вы можете удалить поведение идентичности или выбрать Guid как тип ключа, если хотите знать уникальный ключ, прежде чем он будет сохранен в первый раз. –

+0

Я не делаю набор, это обновление существующей записи, которая уже сохраняется. Т.е. мои намерения не создавали новую запись с идентификатором 1, но изменяли существующую запись с идентификатором 1. – Oniisaki

+0

Я не знаю, что. Я говорил о вашем «не могу сделать LoadById». –

ответ

1

Метод Save вызывает сгенерированную хранимую процедуру. Вы можете проверить код этой хранимой процедуры, чтобы понять, почему она создает новую запись вместо обновления существующей.

По умолчанию оптимистический параллелизм включен. В этом режиме перед обновлением экземпляра необходимо установить свойство RowVersion. Если значение null, хранимая процедура создаст новую запись.