Я пытаюсь заставить LINQ to SQL сохранить изменения в прикрепленном объекте, в котором у вспомогательной таблицы есть столбец DateTime, который, как мне кажется, должен функционировать для контроля версий строк, как описано здесь .
Таблица выглядит так:
CREATE TABLE [dbo].[client](
[client_id] [int] IDENTITY(1,1) NOT NULL,
[client_address1] varchar(100) NULL,
/* snip */
[modified_date] datetime NOT NULL,
CONSTRAINT [PK_CLIENT] PRIMARY KEY CLUSTERED ([client_id] ASC) )
Соответствующие атрибуты в свойствеified_date установлены так же в конструкторе DBML:
Auto Generated Value: True
Auto-Sync: Always
Nullable: False
Primary Key: False
Read Only: False
Server Data Type: DateTime
Source: modified_date
Time Stamp: True
Update Check: Never
И получающиеся атрибуты в объявлении свойстваified_date выглядят правильно, насколько я могу сказать:
[Column(Storage="_modified_date", AutoSync=AutoSync.Always,
DbType="DateTime", IsDbGenerated=true, IsVersion=true,
UpdateCheck=UpdateCheck.Never)]
Процесс сохранения изменений на клиенте происходит примерно так:
var c = new client { client_id = idOfClientToSave };
c.client_address1 = uxAddress1.Text;
// The DataContext is initialized in the constructor
// of ClientDataAccess
using (var ClientData = new ClientDataAccess())
{
ClientData.SaveClient(c);
}
И наконец, метод, который пытается представить изменения, выглядит следующим образом:
public int SaveClient(client c)
{
c.modified_date = DateTime.Now.ToUniversalTime();
if (c.client_id == 0)
{
_db.GetTable<client>().InsertOnSubmit(c);
}
else
{
_db.GetTable<client>().Attach(c, true);
}
try
{
_db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException)
{
foreach (var con in _db.ChangeConflicts)
{
con.Resolve(RefreshMode.OverwriteCurrentValues);
}
throw;
}
}
Но _db.SubmitChanges (ConflictMode.ContinueOnConflict) по-прежнему генерирует исключение ChangeConflict (как и _db.SubmitChanges ()). Я не вижу, как прикрепленный объект может происходить из текущего DataContext, так как он сам по себе создается и не извлекается из DataContext до присоединения.
Любая помощь будет принята с благодарностью.