在我的项目中,我们希望能够记录谁查看了特定表(或任何表)。现在,我不打算记录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方法中都复制粘贴一些代码,然后第二步它应该允许记录任何表而不仅仅是一个表。