首页 新闻 会员 周边 捐助

重写EntityFramework6.0中的SaveChange方法

0
悬赏园豆:20 [已解决问题] 解决于 2015-04-15 16:40
   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缓存中

淡_- -的主页 淡_- - | 初学一级 | 园豆:34
提问于:2015-04-13 18:25
< >
分享
最佳答案
0

不知道你要问的是什么。如果获取item的类型,通过item.Entity.GetType()可以获得未被Wrapper的类型,如果Wrapper后,则类型改变了。

收获园豆:20
519740105 | 大侠五级 |园豆:5810 | 2015-04-13 21:05

我是想知道ef现在正常操作的是哪张表并且取得其中的数据

淡_- - | 园豆:34 (初学一级) | 2015-04-14 09:52

@淡_- -: 这个操作有点麻烦了。

1、要通过Entity获取实际的类型,Wrapper后的类型是变了的(默认是AbcWrapper格式),需要通过特殊的方法获取。

2、默认的情况,表名是实际的类型名

3、可以通过Attribute或Mapping来实现表名的修改。

所以,从以上情况看,是没办法简单获得表名的,具体的方法,我也需要研究下,奈何现在没空。

个人以为,能获得具体的实体类型名就可以了,而不一定要较真具体的表名,我现在就这样。

519740105 | 园豆:5810 (大侠五级) | 2015-04-14 10:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册