实体框架4 - 并不总是使用ApplyCurrentValues更新布尔属性

Cep*_*has 6 entity-framework

我有一个简单的实体,由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)

没有尝试更新活动字段.

Cep*_*has 7

EF 4问题中的这个ApplyCurrentValues有答案.

它应该是

db.Countries.Attach(db.Countries.Single(c => c.ID == countryToEdit.ID));
Run Code Online (Sandbox Code Playgroud)

如果附加空白存根对象,则布尔字段初始化为false.ApplyCurrentValues调用看到存根和编辑对象之间的布尔值没有变化.

上面的代码添加了另一个数据库查询,但我可以忍受.