Breeze不会更新可为空的datetime字段

时间:2013-08-15 14:41:55

标签: breeze

我在服务器上设置了一个可以为空的datetime字段,但该字段未在我的数据库中更新。

        private bool BeforeSaveLeaseEntry(Lease leaseEntry, EntityInfo info)
    {
        if (info.EntityState == EntityState.Added)
        {
            leaseEntry.CreatedDate = DateTime.UtcNow.ToLocalTime();
        }
        if (info.EntityState == EntityState.Modified)
        {
            leaseEntry.LastUpdatedDate = DateTime.UtcNow.ToLocalTime();
        }
        return true;
    }

CreatedDate不可为空并且已更新。 LastUpdatedDate可以为空,永远不会更新。

代码被命中但是当我在我的SQL服务器上运行跟踪时,该字段从未包含在更新代码中。

exec sp_executesql N'update [dbo].[Leases]
set [ContractNo] = @0
where ([LeaseID] = @1)
',N'@0 varchar(25),@1 int',@0='test6',@1=27415

1 个答案:

答案 0 :(得分:1)

很抱歉,在Breeze v 1.1.3中我们添加了一个 EntityInfo.ForceUpdate 布尔属性,但它从未进入主Breeze文档,它只出现在发行说明中。

当对现有实体的任何属性进行服务器端修改时,此属性可用于强制整个实体的服务器端更新。可以使用的另一种方法是显式更新EntityInfo.OriginalValuesMap。

这两个背后的想法是,在更新时,Breeze仅为已更改的那些se属性创建更新语句。由于Breeze的跟踪机制在“originalValuesMap”中添加了一个条目,因此会自动检测到任何客户端更改,但这不能自动完成服务器端更改,因为服务器端实体未被检测为执行有关属性更改的通知。

“EntityInfo.ForceUpdate”方法强制为实体上的每个属性生成更新语句,而直接更新EntityInfo.OriginalValuesMap将仅更新在地图中找到的那些属性。