Когда я обновляю базу данных, мне приходится жестко кодировать отображение каждого свойства, потому что использование attach приводит к исключению. Это не слишком элегантно. Есть ли более легкое решение, о котором я не знаю? Мой код ниже, показывая метод «MapData», который я вызываю для этой цели:Обновление базы данных SqlCE Linq-to-Sql
Btw, классы сущностей (здесь, пользователи) автогенерируются с помощью SqlMetal.
Public Class UserDataService
Public Sub Save(ByVal user As Users)
Dim ctx As New TestDB(connection)
Dim id As Integer = user.Id
If user.Id = 0 Then
Insert(user)
Else
Dim q = (From n In ctx.Users Where n.Id = id Select n).Single
q.MapData(user)
For Each o In user.Orders
o.Save()
Next
' ctx.Users.Attach(user, q) ' Does not work
' ctx.Users.Attach(user, True) ' Does not work
End If
ctx.SubmitChanges()
ctx.Dispose()
End Sub
End Class
Partial Public Class Users
Public Sub MapData(ByVal row As Users)
Me.Name = row.Name
End Sub
End Class
edit1:
Исключения:
ctx.Users.Attach (пользователь, д)
Невозможно добавить сущность с ключом, который уже в использовать.
ctx.Users.Attach (пользователь, True)
Субъект может быть присоединен только модифицировано без первоначального состояния, если он заявляет член версии или не имеет проверки обновлений политики.
EDIT2:
Я пытался добавить столбец временную метку, которую я считаю, должен удовлетворять последний Упоминается исключение. Поэтому я добавляю колонку, показанную здесь. Это не помогает, но, возможно, мне нужно сделать некоторые дополнительные настройки, чтобы это было эффективным?
Что исключение вы получаете? – SLaks
Я отредактировал эту информацию. – bretddog