0

我在服务器上设置了一个可为空的日期时间字段,但该字段没有在我的数据库中更新。

        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
4

1 回答 1

1

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

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

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

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

于 2013-08-15T15:51:00.973 回答