私は古いプロジェクトをASP.NET 5とEntity Framework 7に移植しています。データベースの最初のアプローチ(DNX足場)を使用してモデルを作成しました。Entity Framework 7監査ログ
古いプロジェクトは、Entity Frameworkの4に基づくものであり、監査の追跡がDbContext
のSaveChanges
方法オーバーライドして実装されます。私の質問はどのように私はEntity Frameworkを7でこれを実装することができ、ある
public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
int? UserId = null;
if (System.Web.HttpContext.Current != null)
UserId = (from user in Users.Where(u => u.UserName == System.Web.HttpContext.Current.User.Identity.Name) select user.Id).SingleOrDefault();
foreach (ObjectStateEntry entry in ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
{
Type EntityType = entry.Entity.GetType();
PropertyInfo pCreated = EntityType.GetProperty("Created");
PropertyInfo pCreatedById = EntityType.GetProperty("CreatedById");
PropertyInfo pModified = EntityType.GetProperty("Modified");
PropertyInfo pModifiedById = EntityType.GetProperty("ModifiedById");
if (entry.State == EntityState.Added)
{
if (pCreated != null)
pCreated.SetValue(entry.Entity, DateTime.Now, new object[0]);
if (pCreatedById != null && UserId != null)
pCreatedById.SetValue(entry.Entity, UserId, new object[0]);
}
if (pModified != null)
pModified.SetValue(entry.Entity, DateTime.Now, new object[0]);
if (pModifiedById != null && UserId != null)
pModifiedById.SetValue(entry.Entity, UserId, new object[0]);
}
}
return base.SaveChanges(options);
}
を?コードを最初にやってみる必要がありますか?これは、我々は現在、EF 6でそれを行う方法です
、それはまだです:
ChangeTrackerのAPIを使用して(EF 6+):
EF7はまだ完成しておらず、まったく生産準備ができていません。私は最初にEF6とDbContext APIに行くだろう。成熟する前に実装されなければならないEF7バックログにはまだ多くのアイテムがあります。 –
私の理解では、あなたはまったく同じ方法で実装することができます...または基本的に同じです。 – Seabizkit
個人的には、データ関連レイヤーでSystem.Webを参照するのではなく、メソッドにユーザーIDを渡す必要があります。 – Seabizkit