public override int SaveChanges() { //判断是用重写的savechanges方法 还是普通的savechange方法 if (LogChangesDuringSave) { //过滤所有修改了的实体,包括:增加 / 修改 / 删除 var entries = from obj in this.ChangeTracker.Entries() where obj.State != EntityState.Unchanged select obj; foreach (var item in entries) { switch (item.State) { case EntityState.Added: Console.WriteLine("Adding a {0}", item.Entity.GetType()); PrintPropertyValues(item.CurrentValues, item.CurrentValues.PropertyNames); break; case EntityState.Deleted: Console.WriteLine("Adding a {0}", item.Entity.GetType()); PrintPropertyValues(item.CurrentValues, item.CurrentValues.PropertyNames); break; case EntityState.Modified: Console.WriteLine("Adding a {0}", item.Entity.GetType()); PrintPropertyValues(item.CurrentValues, item.CurrentValues.PropertyNames); break; default: break; } } } //返回普通的savechange方法 return base.SaveChanges(); }
这是我重写的SaveChange方法 我需要获取每个item的类型,因为这个item中Entity的类型为object类型 需要转换才能获取里面的值 然后构建对象 存入redis缓存中
不知道你要问的是什么。如果获取item的类型,通过item.Entity.GetType()可以获得未被Wrapper的类型,如果Wrapper后,则类型改变了。
我是想知道ef现在正常操作的是哪张表并且取得其中的数据
@淡_- -: 这个操作有点麻烦了。
1、要通过Entity获取实际的类型,Wrapper后的类型是变了的(默认是AbcWrapper格式),需要通过特殊的方法获取。
2、默认的情况,表名是实际的类型名
3、可以通过Attribute或Mapping来实现表名的修改。
所以,从以上情况看,是没办法简单获得表名的,具体的方法,我也需要研究下,奈何现在没空。
个人以为,能获得具体的实体类型名就可以了,而不一定要较真具体的表名,我现在就这样。