2016-05-03 53 views
1

我想做的事情在LINQ如下:如何使用LINQ更新數據庫中的記錄?

update [dbo].[AdminLogin] set [ADMIN_PASSWORD] = 'abc' where [ADMIN_ID] = 1 

在那裏我從一個模型和管理員ID獲得管理員密碼存儲在一個變量:

var userid = (from m in db.RequestPasswordReset 
        where m.Id == Unid 
        select m.UserId).FirstOrDefault(); 

怎麼辦呢?

+0

您使用的EF背景? –

+0

Linq如果獲取/過濾數據,不用於更新數據庫 –

+0

@KarthikMR是的我是 – sumedha

回答

3

更新實體您必須指定Modified狀態。

using (var db= new DbContext()) 
{ 
    var entity= db.AdminLogin.Where(x => x.ADMIN_ID == userid).SingleOrDefault(); 
    entity.ADMIN_PASSWORD = 'abc'; 
    db.Entry(entity).State = System.Data.Entity.EntityState.Modified; 
    db.SaveChanges(); 
} 

如果使用則linQ.dbml文件中看到細節here

+2

我相信你不需要將實體狀態標記爲已修改,因爲Ef會跟蹤它爲你http://stackoverflow.com/questions/7106211/entity-framework爲什麼顯式設置實體狀態要修改 你可以省略這行'db.Entry(entity).State = System.Data.Entity.EntityState.Modified; EF會爲你做這件事' – Eldho

+1

'手動設置狀態在分離實體的情況下很重要(實體加載時沒有跟蹤或在當前上下文之外創建)'。所以使用'Modified'意味着你總是處於安全的狀態。 –

+0

是它的有效語句,但是當你獲取實體時,它將被跟蹤,因此我相信如果你通過修改而不保存更改而不標記它,它仍然會執行「更新」而不是插入。糾正我,如果我;米錯 – Eldho

1

使用此代碼:

using (var context = new YourContext()) 
{ 
    var res = context.AdminLogin.Where(x => x.ADMIN_ID == userid).SingleOrDefault(); 
    res.ADMIN_PASSWORD = 'abc'; 
    context.SaveChanges(); 
} 
0
userid.ADMIN_PASSWORD= 'abc'; 
db.SaveChanges(); //better then db.SubmitChanges() in some case 
1

你可以試試這個:

var user = db.AdminLogin.FirstOrDefault(x => x.ADMIN_ID == id); 
user.ADMIN_PASSWORD = 'abc'; 
db.SaveChanges(); 
0

你寫這樣的:

using (var db= new DbContext()) 
{ 
    var entity= db.AdminLogin.Where(x => x.ADMIN_ID == userid).FirstOrDefault(); 
    entity.ADMIN_PASSWORD = 'abc'; 

    db.SubmitChanges(); 
}