2010-12-14 123 views
7

是在EF代码首先,它可以不使用存根对象,查询dB为单位的整行更新...实体框架代码第一次更新

例如

public class Dinner 
{  
    public int DinnerID { get; set; }  
    public string Title { get; set; }  
    public DateTime EventDate { get; set; }  
    public string Address { get; set; }  
    public string Country { get; set; }  
    public string HostedBy { get; set; }  
} 



Dinner dinner = dinner.DinnerID = 1;  
dinner.HostedBy = "NameChanged" 
nerdDinners.SaveChanges(); 

上面的代码是否会创建一个Update语句,该语句将使DinnerID 1的行的以下列为空?

标题,EVENTDATE,地址,国家

有没有一种方法或方法,如“PropertyModified” =真,那么剩下的让他们=假,让HostedBy是唯一一个会更新?

回答

4

认为您正在寻找ApplyCurrentValues

public void UpdateDinner(Dinner existingDinner) 
{ 
    var stub = new Dinner { DinnerId = existingDinner.DinnerId }; 
    ctx.Dinners.Attach(stub); 
    ctx.ApplyCurrentValues(existingDinner); 
    ctx.SaveChanges(); 
} 

ApplyCurrentValues会从现有对象值对象的图形(在上述案例 - 存根实体)。

备注上MSDN部分:

从对象的原始值不同的任何值都被标记为修改。

这是你的事后?

+0

为什么不能找到'ApplyCurrentValues()'?方法不存在。 – 2011-01-31 18:05:24

+0

它是'ObjectContext'类中的一个方法... – RPM1984 2011-01-31 20:54:05

0

也许试试这个吧,它是EF Code First特有的,它似乎与EF不同。

var dinner = context.Dinners.Find(1); 

context.Entry(dinner).Property(d => d.HostedBy).IsModified = true; 

context.SaveChanges(); 

ADO.NET team blog

“标记属性改性力量的更新将被发送到数据库的属性时调用SaveChanges即使属性的当前值是一样的原始值“。

1

要建立在保罗的答案,下面就当您使用EF型或数据库的第一部作品:

context.ObjectStateManager.GetObjectStateEntry(dinner).SetModifiedProperty("HostedBy");