0

サーバーで null 許容の日時フィールドを設定していますが、そのフィールドがデータベースで更新されていません。

        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 は null 許容ではなく、更新されます。LastUpdatedDate は null 可能であり、更新されることはありません。

コードはヒットしますが、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 プロパティの更新ステートメントのみを作成するというものです。「originalValuesMap」にエントリを追加する Breeze の追跡メカニズムにより、クライアント側の変更はすべて自動的に検出されますが、サーバー側のエンティティはプロパティの変更に関する通知を実行するように設定されていないため、これはサーバー側の変更に対して自動的に行うことはできません。

「EntityInfo.ForceUpdate」メソッドは、エンティティのすべてのプロパティに対して更新ステートメントの生成を強制しますが、EntityInfo.OriginalValuesMap を直接更新すると、マップで見つかったプロパティのみが更新されます。

于 2013-08-15T15:51:00.973 に答える