2010-01-08 99 views
0

我正在使用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"); 
} 

回答

0

我用我自己的实体,并将其复制到上下文实体,你可以看到。

这是我的问题吗?

是的,这是破坏DataContext s identity map(用于实体跟踪)。更新最简单的方法大约是:

User user = _dbctx.Users.Single(u => u.usrID == 1474); 
user.FirstName = "TestXXXX"; 
_dbctx.SubmitChanges(); 
-1

之前提交的变化,你应该补充声明"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(); 
    }