2010-01-08 97 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(); 
    }