如何在Entity Framework中记录从任何表的读取

时间:2018-08-16 17:44:33

标签: c# entity-framework-6

在我的项目中,我们希望能够记录谁查看了特定表(或任何表)。现在,我不打算记录SQL查询,而是寻找最通用的记录(已记录更新和删除记录)谁已读取(查看)数据的方法。我执行某些内置于Entity Framework的操作,或者执行我编写的自定义代码。我不确定哪种方法最好或被认为是最佳实践。

这是正常获取的示例

public List<DataModel.Table1> GetTable1(int Id1, int Id2)
{
    using (var context = new MyContext(base.GetContext))
    {
        var x = (from s in context.Table1
                 where s.Id1 == Id1 && s.Id2 == Id2
                 select s).ToList();
        return x;
    }
}

我正在寻找一种记录谁执行此操作的方法。然后用BL(或在此调用中)将另一个模型的另一个调用传递给数据访问层,或者是否有内置的方式来记录表名,检索到的主键以及执行此操作的用户内置在实体框架中。我知道这里有更新等。但是我不确定要阅读(或观看)。

这里有一些我做的例子。下面是我要怎么做?如果可以的话,我可以将它设置得更好或更干净些。任何帮助将不胜感激。

    public List<DataModel.Table1> GetTable1(int Id1, int Id2)
            {
string y =  context.Database.Log.Target.ToString();
                using (var context = new MyContext(base.GetContext))
                {
                    var x = (from s in context.Table1
                             where s.Id1 == Id1 && s.Id2 == Id2
                             select s).ToList();
List<DataModel.ViewLog> views = new List<DataModel.ViewLog>();
                foreach (DataModel.Table1 f in  x)
                {
                    DataModel.ViewLog v = new DataModel.ViewLog
                    {
                        TableName = y,
                        CreatedDate = DateTime.Now,
                        ViewedByEmployee = "",//ill get this somewhere else or pass it down
                        PkIdViewed = f.Id1
                    };
                    views.Add(v);
                }
                DataAccess.ViewLog viewLog = new                 DataAccess.ViewLog();
                viewLog.LogView(views);//saves everything in the list
                    return x;
                }
            }

编辑。注意,我正在寻找一种集中化的解决方案,这样我就不必在我拥有的每个get方法中都复制粘贴一些代码,然后第二步它应该允许记录任何表而不仅仅是一个表。

0 个答案:

没有答案