Linq2Sql提交更改没有更新
问题描述:
我正在使用Linq2Sql并尝试更新表。Linq2Sql提交更改没有更新
但是当我尝试更新列时没有更新。
我已经用attach语句试过了,但后来出现重复键错误。
我正在使用自己的实体并将其复制到上下文实体中,如您所见。
这是我的问题吗?
这是我的保存方法。
public void SaveUser(User user)
{
Mylester.Domain.DataContext.User sqluser = new Mylester.Domain.DataContext.User();
sqluser.usrID = user.ID;
sqluser.usrEmployeeID = user.EmployeeID;
sqluser.usrFirstName = user.FirstName;
sqluser.usrLastName = user.LastName;
sqluser.usrPassword = user.Password;
sqluser.usrEmail = user.Email;
sqluser.usrModified = user.Modified;
sqluser.usrCreated = user.Created;
sqluser.usrLastLoggedOn = user.LastLoggedOn;
sqluser.usrBrowserUsed = user.BrowserUsed;
sqluser.usrLoginOnly = user.LoginOnly;
sqluser.usrViewedWeeklyTimesheetChanges = user.ViewedWeeklyTimesheetChanges;
sqluser.usrActive = user.Active;
//_dbctx.Users.Attach(sqluser);
_dbctx.SubmitChanges();
}
这是我的测试方法。
[TestMethod]
public void UpdateUser()
{
User user;
user = _service.GetUser(1474);
user.FirstName = "TestXXXX";
_service.SaveUser(user);
user = _service.GetUser(1474);
Assert.AreEqual(user.FirstName, "TestXXXX");
}
答
我用我自己的实体,并将其复制到上下文实体,你可以看到。
这是我的问题吗?
是的,这是破坏DataContext
s identity map(用于实体跟踪)。更新最简单的方法大约是:
User user = _dbctx.Users.Single(u => u.usrID == 1474);
user.FirstName = "TestXXXX";
_dbctx.SubmitChanges();
答
之前提交的变化,你应该补充声明"dbcontext.tablename.InserOnSubmit(object);"
方法。
public void SaveUser(User user)
{
Mylester.Domain.DataContext.User sqluser = new Mylester.Domain.DataContext.User();
sqluser.usrID = user.ID;
sqluser.usrEmployeeID = user.EmployeeID;
sqluser.usrFirstName = user.FirstName;
sqluser.usrLastName = user.LastName;
sqluser.usrPassword = user.Password;
sqluser.usrEmail = user.Email;
sqluser.usrModified = user.Modified;
sqluser.usrCreated = user.Created;
sqluser.usrLastLoggedOn = user.LastLoggedOn;
sqluser.usrBrowserUsed = user.BrowserUsed;
sqluser.usrLoginOnly = user.LoginOnly;
sqluser.usrViewedWeeklyTimesheetChanges = user.ViewedWeeklyTimesheetChanges;
sqluser.usrActive = user.Active;
//Use this to add the sql user to table named "User"
_dbctx.Users.InsertOnSubmit(sqluser);
//_dbctx.Users.Attach(sqluser);
_dbctx.SubmitChanges();
}