2015-11-13 239 views
0

我有一個模型類,如下EF select語句

public class Employee() 
{ 
    public string Name {get; set;} 
    public string Age {get; set;} 
    .. 
    .. 
} 

想如果我被follwing LINQ

DbContext db = new DbContext(); 
Employee employee = dc.Emplyees.where(x=>x.id==id).FirstorDefault(); 
employee.Age ="22"; 
db.SaveChanges(); 

我的問題是更新的年紀,我更新僱員的年齡,我會做需要獲取所有列是否有任何方式,我可以只讀取ID和年齡並更新年齡;

感謝

+0

你可以用存儲過程來做到這一點,但是你遇到了什麼問題?你可以縮短這個邏輯:var employee = dc.Emplyees.Find(id); –

+0

你解決了你的問題嗎? – Daniel

回答

1

不開箱,沒有。實體框架的工作方式是跟蹤完整對象。您需要完整的對象才能對該對象進行更改並進行更新。否則,實體框架只會將所有其他屬性都清空,因爲它會解釋您希望通過不向其發送任何內容來清除值。

但是,您可以直接使用數據庫,併發出UPDATE或調用存儲過程來手動執行更新。如果你願意,你可以在你的上下文中做到這一點,然後只需從你的控制器調用方法,所有數據庫的東西仍然在同一個地方。在上下文中,Database實例屬性具有您直接執行SQL所需的一切。

1

首先,你只選擇年齡

var employee = db.Employees.Where(x => x.Id == id).Select(x => new Employee{ Id = x.Id, Age = x.Age}).FirstOrDefault(); 

通過這樣做,你只是檢索年齡和來自數據庫的ID。

對於更新,你可以做這樣的

var employee = new Employee{Id = id, Name = "My new Name", Age = 25}; 
db.Employees.Attach(employee); 
db.Entry(employee).Property(x => x.Name).IsModified = true; 
db.Entry(employee).Property(x => x.Age).IsModified = true; 
db.SaveChanges();