1

LastModified 日付を設定する必要があるため、更新メソッドは常に更新されます。一部の値が変更されたかどうかを動的に確認する方法があるかどうか疑問に思っていました。

の状態オブジェクトは次のようになります。

public partial class Action : IEntity
{
    public long Id { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public System.DateTime Created { get; set; }
    public System.DateTime LastModified { get; set; }
    public Nullable<System.DateTime> Deleted { get; set; }
}

私が使用するインターフェースは次のようになります。

public interface IEntity
{
    long Id { get; set; }        
    DateTime Created { get; set; }
    DateTime LastModified { get; set; }
    DateTime? Deleted { get; set; }       
}

私の更新方法は次のようになります (変更は後で保存されます)。

    public virtual void Update(T entity)
    {
        DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
        var attachedEntity = DbSet.Find(entity.Id);

        if (attachedEntity != null)
        {
            var attachedEntry = DbContext.Entry(attachedEntity);

            entity.Created = attachedEntity.Created;
            entity.LastModified = DateTime.Now;

            attachedEntry.CurrentValues.SetValues(entity);
        }
        else
        {
            dbEntityEntry.State = EntityState.Modified;
            entity.LastModified = DateTime.Now;
        }
    }

したがって、実際には、IEntityインターフェイスで T として渡されるすべてのオブジェクトに対して一般的な更新を実行します。LastModifiedただし、値が変更されるため、このメソッドを呼び出すたびに更新が実行されます。次のような多くの更新クエリが発生します。

exec sp_executesql N'update [dbo].[BiztalkEntity]
set [LastModified] = @0
where ([Id] = @1)
',N'@0 datetime2(7),@1 bigint',@0='2013-05-17 11:22:52.4183349',@1=10007

クエリが毎回実行されないようにする方法を教えてください。

4

1 に答える 1