我有一个简单的实体,由Entity Framework 4使用VS 2010 RC生成.它看起来像下面的POCO.
public class Company
{
public int ID { get; set; }
public string Name { get; set; }
public string ISOCode { get; set; }
public boolean Active { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的存储库代码如下.'db'是我在构造函数中初始化的上下文.
public void EditCountry(Country countryToEdit)
{
db.Countries.Attach(new Country { ID = countryToEdit.ID });
db.Countries.ApplyCurrentValues(countryToEdit);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
在countryToEdit中将Active字段从false更改为true会生成以下SQL
update [dbo].[Countries]
set [Name] = @0, [ISOCode] = @1, [Active] = @2
where ([ID] = @3)
@0 nvarchar(256),@1 nvarchar(12),@2 bit,@3 int,@0='Algeria',@1='DZ',@2=1,@3=4
Run Code Online (Sandbox Code Playgroud)
这是预料之中的.
如果我在countryToEdit中将Active字段从true更改为false,则会生成以下SQL
update [dbo].[Countries]
set [Name] = @0, [ISOCode] = @1
where ([ID] = @2)
@0 nvarchar(256),@1 nvarchar(12),@2 int,@0='Afghanistann',@1='AF',@2=1
Run Code Online (Sandbox Code Playgroud)
没有尝试更新活动字段.
EF 4问题中的这个ApplyCurrentValues有答案.
它应该是
db.Countries.Attach(db.Countries.Single(c => c.ID == countryToEdit.ID));
Run Code Online (Sandbox Code Playgroud)
如果附加空白存根对象,则布尔字段初始化为false.ApplyCurrentValues调用看到存根和编辑对象之间的布尔值没有变化.
上面的代码添加了另一个数据库查询,但我可以忍受.
| 归档时间: |
|
| 查看次数: |
3105 次 |
| 最近记录: |