ef 多个模块,通过程序集映射entity,指定对应的repository

在Entity Framework repository下加两个方法:

        public virtual T GetByEntityName(object id, string EntityTypeName)
        {
            dynamic repository = GetEFRepository(EntityTypeName);
            if (repository != null)
                return repository.Entities.Find(id);
            else
                return null;
        }

        public virtual dynamic GetRecordRepository(string EntityTypeName)
        {
            dynamic repository = GetEFRepository(EntityTypeName);
            if (repository != null)
            {
                var type = repository.GetType().GetGenericArguments()[0];
                dynamic part = Activator.CreateInstance(type);
                return part;
            }
            else
            {
                return null;
            }
        }        private object GetEFRepository(string EntityTypeName)        {

          

            if (_repositoryDictionary == null)            {                var typesToRegister = TypeUtil.GetEntityTypes();                _repositoryDictionary = new Dictionary<string, object>();                foreach (var type in typesToRegister)                {                    object repository = Activator.CreateInstance(typeof(EfRepository<>).MakeGenericType(type), _context);

                    _repositoryDictionary[type.Name] = repository;                }            }

            if (_repositoryDictionary.ContainsKey(EntityTypeName))                return _repositoryDictionary[EntityTypeName];            else                return null;        }

TypeUtil.cs

 public class TypeUtil
    {
        public static IList<Type> GetEntityTypes()
        {
            var cacheManager = new MemoryCacheManager();
            return cacheManager.Get("ENTITY-TYPE-ASSEMBLY", () =>
            {
                var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
                 .Where(type => (typeof(BaseEntity).IsAssignableFrom(type) && (type.GetConstructor(Type.EmptyTypes) != null)));
                return typesToRegister.ToList();
            });

        }
    }

test:

 [Test]
        public void TypeUtilTest()
        {

            var n = _repository.GetRecordRepository("NewsEntity");
            dynamic nm = _repository.GetByEntityName(1, "NewsEntity");
            var title = nm.Title;

            var c = _repository.GetRecordRepository("NewsCommentEntity");
            dynamic cm = _repository.GetByEntityName(1, "NewsCommentEntity");
            var comment = cm.Comment;
            string pass = title + "\n" + comment;
            Assert.Pass(pass);

        }
时间: 2024-08-24 10:06:57

ef 多个模块,通过程序集映射entity,指定对应的repository的相关文章

使用EF访问数据库,出现“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。

今天在使用的EF时候,发生了"System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常.这样的一个错误 查了原因,原来是appconfig中,connectionStrings的位置放错了.因为configSections必须是appconfig的第一个节点 这样是不对的. 应该是 感觉这种情况应该不仅仅只限于这个EF,只要configSections不是第一个标签就会有问题,也适用于其他情况~~

Raspberry Pi 摄像头模块应用程序文档翻译

http://dreamcolor.net/archives/raspicam-documentation.html —————————————————————————————————————————————————————————————————————— Raspberry Pi 摄像头模块应用程序文档翻译 更新日志: 2014 年 3 月 24 日更新:根据 2013 年 12 月更新的文档,对原译文进行扩展翻译.翻译完毕. 2014 年 3 月 4 日更新:根据 2013 年 12 月更

MVC应用程序使用Entity Framework

创建空的MVC应用程序,为了想使用Entity Framework的类库,发现即无法正常引用.如下图,Insus.NET已经明确引了System.Data.Entity(下图Highlight的代码),但类别在继承DbContext时,却无法正确常引用. 去微软MSDN查看资料:http://msdn.microsoft.com/en-us/library/system.data.entity(v=vs.103).aspx Insus.NET所创建的MVC应用程序也是.NET Framework

iis重写模块实现程序自动二级域名,微软提供的URL重写2.0版本适用IIS以上

在iis7以后微软提供了url重写2.0版本,可以通过安装重写组件来实现.适用于iis7以上版本. 安装有两种方式可以选择,一是下载安装文件,二是通过“web平台安装程序”安装 1.下载安装文件 下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=7435 或 https://www.iis.net/downloads/microsoft/url-rewrite 2.“web平台安装程序”安装 安装完成后iis的网站中会出现

Java程序员常用的@Component、@Repository、@Controller、@Serv

Java程序员常用的@Component.@Repository.@Controller.@Service系列[案例demo3] 很多程序员通过在类上使用@Repository.@Component.@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中.这些类就成了 Spring受管组件.这三个注解除了作用于不同软件层次的类,其使用方式与@Repository 是完全相同的. 处

ASP.NET MVC 5 + EF 6 入门教程 (5) Model和Entity Framework

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 源码下载:点我下载 MVC中的Model是用来给View提供显示数据的对象. 这里我们首先创建一个Model对象. 在解决方案资源管理器中右键点击Models文件夹,选择添加->类.添加一个名为Employee.cs的Model类.Models文件夹

Python学习笔记-打包发布Python模块或程序,安装包

Python模块.扩展和应用程序可以按以下几种形式进行打包和发布: python setup.py获取帮助的方式 python setup.py --help python setup.py --help-commands 所有可以使用的命令,如build,install python setup.py COMMAND --help 获取特定命令的帮助 python setup.py COMMAND --help-formats 获取特定命令支持使用的格式 打包 1.压缩文件(使用distuti

Idea maven项目引用父模块 提示程序包不存在

之前一直使用Eclipse,项目打包习惯性的先clean 再install. 但是最近再使用Idea maven 打包的时候(子模块引用的都是父模块pom文件里的jar包),子模块先 clean 后  install 的时候提示程序包不存在 解决方法: 1.父模块先clean 再 install 2.子模块,选中子模块右键  Build Module >install 即可(如果还是不行,选中Rebuild Module 再 install) (这个时候千万别先clean,因为执行clean就会

一个简单的EF Linq MVC Web应用程序

LINQ(Language Integrated Query)语言集成查询是一组用于c#和Visual Basic语言的扩展. 它允许编写C#或者Visual Basic代码以操作内存数据的方式,查询数据库. LINQ的读法:lin k 很多人会误读为lin Q LINQ的全称:Language-Integrated Query LINQ的关键词:from, select, in, where, group by, orderby, … 详情请查阅:https://baike.so.com/do