私のエンティティのいくつかのアプリケーションでは、エンティティに変更情報(ユーザー名と変更時刻)を保存したいと考えています。それを達成するために、私はインターフェイスを作成しました。エンティティフレームワーク格納変更情報デザインの提案?
/// <summary>
/// Marks a trackable entity
/// </summary>
public interface ITrackableEntity
{
/// <summary>
/// Gets or sets the date the entity was modified
/// </summary>
DateTime? ModifiedOn { get; set; }
/// <summary>
/// Gets or sets the user who modified the entity
/// </summary>
string ModifiedBy { get; set; }
}
このインターフェイスを実装する基本クラスを作成しました。
[Serializable]
public abstract class BaseTrackableEntity : BaseEntity, ITrackableEntity
{
/// <summary>
/// Gets or sets the date the entity was modified
/// </summary>
public DateTime? ModifiedOn { get; set; }
/// <summary>
/// Gets or sets the user who modified the entity
/// </summary>
public string ModifiedBy { get; set; }
}
私はDbContextから継承されたと私は、次のようSaveChangesメソッド関数を上書きしている私自身のカスタムDbContextクラスを作成しました。
...
foreach (DbEntityEntry entry in this.ChangeTracker.Entries())
{
...
...
else if(entry.State == EntityState.Modified && entry.Entity is ITrackableEntity)
{
(entry.Entity as ITrackableEntity).ModifiedOn = DateTime.UtcNow;
(entry.Entity as ITrackableEntity).ModifiedBy = this._webHelper.GetLoggedInUserName();
}
}
...
return base.SaveChanges();
これは、実際に働いているが、私は、エンティティフレームワークに新しいですので、私は、これはそれを行うための最善の方法であることを確認していません。この時点で私の質問は、 このデザインは将来私に問題を引き起こすでしょうか?より良い解決策はありますか?
この質問はcodereview.stackexchange.comでうまく収まるでしょう。 –