我在服务器上设置了一个可以为空的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
答案 0 :(得分:1)
很抱歉,在Breeze v 1.1.3中我们添加了一个 EntityInfo.ForceUpdate 布尔属性,但它从未进入主Breeze文档,它只出现在发行说明中。
当对现有实体的任何属性进行服务器端修改时,此属性可用于强制整个实体的服务器端更新。可以使用的另一种方法是显式更新EntityInfo.OriginalValuesMap。
这两个背后的想法是,在更新时,Breeze仅为已更改的那些se属性创建更新语句。由于Breeze的跟踪机制在“originalValuesMap”中添加了一个条目,因此会自动检测到任何客户端更改,但这不能自动完成服务器端更改,因为服务器端实体未被检测为执行有关属性更改的通知。
“EntityInfo.ForceUpdate”方法强制为实体上的每个属性生成更新语句,而直接更新EntityInfo.OriginalValuesMap将仅更新在地图中找到的那些属性。