使用SaveChanging事件
来源:互联网 发布:java web sqlserver 编辑:程序博客网 时间:2024/05/18 14:28
1、使用ADO.Net Entity Data Model 和Linq to Sql 建立数据访问层,SqlBtmsModel 为 生成的ObjectContext 实现类或者DataContext 的实现类
2、编写代码 实现 ObjectContext 或者 DataContext 的 分部定义
partial class SqlBtmsModel
{
public static Action<SqlBtmsModel> RecordHandel;
private bool logFlag = true;
public SqlBtmsModel(bool logFlag) :
base("name=SqlBtmsModel", "SqlBtmsModel")
{
this.logFlag = logFlag;
OnContextCreated();
}
partial void OnContextCreated()
{
if (logFlag)
this.SavingChanges += new EventHandler(Context_SavingChanges);
}
private void Context_SavingChanges(object sender, EventArgs e)
{
SqlBtmsModel context = sender as SqlBtmsModel;
RecordHandel(context);
}
}
3、定义日志类
public class SqlLogManager
{
public static void SaveToDB(SqlBtmsModel context)
{
foreach (ObjectStateEntry entry in
context.ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Modified | EntityState.Deleted))
{
string currentValues = "", originalValues = "";
switch (entry.State)
{
case EntityState.Added:
currentValues = "";
foreach (string item in entry.GetModifiedProperties())
{
currentValues += " |" + item + ":" + entry.CurrentValues[item];
}
Save(context, EntityState.Added, entry.EntitySet.Name, null, currentValues);
break;
case EntityState.Modified:
currentValues = ""; originalValues = "";
foreach (string item in entry.GetModifiedProperties())
{
originalValues += " |" + item + ":" + entry.OriginalValues[item];
currentValues += " |" + item + ":" + entry.CurrentValues[item];
}
Save(context, EntityState.Modified, entry.EntitySet.Name, originalValues, currentValues);
break;
case EntityState.Deleted:
originalValues = "";
foreach (string item in entry.GetModifiedProperties())
{
originalValues += " |" + item + ":" + entry.OriginalValues[item];
}
Save(context, EntityState.Deleted, entry.EntitySet.Name, originalValues, null);
break;
}
}
}
private static void Save(SqlBtmsModel context, EntityState operationType, string entitySetName, string originalValues, string currentValues)
{
SqlBtmsModel logContext = new SqlBtmsModel(false);
OperationRecords record = new OperationRecords();
UserInfo userInfo = UserInfo.GetUserInfo();
record.SeqNo = Guid.NewGuid();
record.OperateDate = DateTime.Now;
record.UserId = userInfo.User.UserName;
record.UserName = userInfo.User.AliasName;
record.Org = userInfo.User.Org.Code + userInfo.User.Org.HostId;
record.OperateType = operationType.ToString();
record.ResourceName = entitySetName;
record.CurrentData = currentValues;
record.OriginalData = originalValues;
logContext.AddToOperationRecords(record);
logContext.SaveChanges();
}
}
4、在程序开始的时候,进行关联
SqlBtmsModel.RecordHandel = SqlLogManager.SaveToDB;
5、以后使用Using(SqlBtmsModel context=new SqlBtmsModel()){.......}或者 Using(SqlBtmsModel context=new SqlBtmsModel(true)){.......}进行数据库的增、删、修改操作时,将自动记录日志,且每操作一条数据,便记录一条日志。若不想记录日志,则可以使用Using(SqlBtmsModel context=new SqlBtmsModel(false)){.......}
- 使用SaveChanging事件
- [事件] -- yii2事件使用
- 事件使用情况-侦听事件,订阅事件
- 使用 COM+ 事件
- 使用跟踪事件10046
- 使用 ItemDataBound 、 ItemCreated 事件
- 使用事件监听器
- 事件:Timer的使用
- 使用跟踪事件10046
- 如何使用事件
- 事件框架使用实例
- 委托 事件 使用举例
- 事件三(使用EventHandler)
- 使用选择器和事件
- 事件CEvent的使用
- 使用跨边界事件
- VC 使用事件
- IE OnKeyDwon事件使用
- adb shell am start -n com.google.android.contacts/.ContactsActivity
- 邮箱收到的附件下载后不能打开的问题
- Meego 1.0发布——可怜的Meego
- 学习笔记(study notes)-APUE中的File I/O
- 总结这学期
- 使用SaveChanging事件
- html里title属性换行的方法
- 夏至已至
- 编译Android最新源码(090508)
- 删除指定文件夹下指定目录
- java 通过System.getProperties()获取系统参数
- 带有ComboBox细胞的DataGrid
- Android Start up
- Tapestry5.1在myeclipse6.5导入tomcat6时报找不到org.apache.tapestry5.spring.TapestrySpringFilter