在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(, "NewsEntity");
var title = nm.Title; var c = _repository.GetRecordRepository("NewsCommentEntity");
dynamic cm = _repository.GetByEntityName(, "NewsCommentEntity");
var comment = cm.Comment;
string pass = title + "\n" + comment;
Assert.Pass(pass); }

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

  1. MVC中使用EF(1):为ASP.NET MVC程序创建Entity Framework数据模型

    为ASP.NET MVC程序创建Entity Framework数据模型 (1 of 10) By  Tom Dykstra |July 30, 2013 Translated by litdwg   ...

  2. EF是啥?【What is Entity Framework?】(EF基础系列2)

    EF产生的背景: 编写ADO.NET访问数据的代码,是沉闷而枯燥的,所以微软提供了一个对象关系映射框架(我们称之为EF),通过EF可以自动帮助我们的程序自动生成相关数据库. Writing and m ...

  3. threading模块和queue模块实现程序并发功能和消息队列

    简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...

  4. winform 发布应用程序 提示 “未能注册模块(程序路径)\ieframe.dll”

    程序安装的时候出现未能注册模块(程序路径)\ieframe.dll提示 这种情况的出现,是因为引用的shdocvw.dll,目前发现了一个折中的解决方法,在安装程序里面,可以看到ieframe.dll ...

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

    今天在使用的EF时候,发生了"System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常.这样的一个错误 查了原因,原来是appconf ...

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

    在iis7以后微软提供了url重写2.0版本,可以通过安装重写组件来实现.适用于iis7以上版本. 安装有两种方式可以选择,一是下载安装文件,二是通过“web平台安装程序”安装 1.下载安装文件 下载 ...

  7. URL重写及ASP.NET路由、Http处理模块、程序等

    这段时间在学习ASP.NET路由.HTTP处理等内容,了解了一些,但又未完全弄懂,似是而非,不管如何,作一总结,供日后借鉴和修改. 一.IIS6和IIS7经典模式和集成模式 在IIS6及IIS7经典模 ...

  8. Java程序员常用的@Component、@Repository、@Controller、@Service系列【案例demo3】

    Java程序员常用的@Component.@Repository.@Controller.@Service系列[案例demo3]   很多程序员通过在类上使用@Repository.@Componen ...

  9. Java 编写小程序,下载指定网页上的所有图片

    使用Java编写一个小程序,可以根据指定的网页地址,下载网页中的所有图片:使用到网络编程.线程池.IO和UUID的技术.具体代码如下: import java.io.File; import java ...

随机推荐

  1. spring-struts-mybatis整合错误集锦

    尽管三大框架特别特别的好用,可是,当我第一次把这三个框架用maven整合到一起的时候.各种错误接踵而至,以下来做一下三大框架整合的总结: 首先是在导入三大框架的各种依赖包的时候,由于我用的是j2ee  ...

  2. scrapy递归抓取网页数据

    scrapy spider的parse方法能够返回两种值:BaseItem.或者Request.通过Request能够实现递归抓取. 假设要抓取的数据在当前页,能够直接解析返回item(代码中带**凝 ...

  3. Bootstrp--一个导航面板切换的实用例子

    <!--导航区开始--> <ul class="nav nav-tabs nav-stacked" role="tablist"> &l ...

  4. 搭建私有Nuget仓库

    使用Nexus搭建私有Nuget仓库 https://www.cnblogs.com/Erik_Xu/p/9211471.html 前言 Nuget是ASP .NET Gallery的一员,是免费.开 ...

  5. 多媒体开发之---如何确定slice_header slice_type 的位置

    引用网友的问答:我找到0x000001 NAL的开头了,请问如何确定slice head的位置,继而得出slice_type呢?Nal unit后紧跟的就是slice head吗?标准里的循环让人看得 ...

  6. eclipse maven 刷新报错

    问题描述: An internal error occurred during: "Loading descriptor for cmbc_wms.".java.lang.Null ...

  7. 语法之知识点的改进(Func/Action)

    上一章我们讲到关于面向对象思想上C#和JAVA之差别.笔者分别从面向对象的三大特性入手.而本章主要讲一些C#改进的知识点.在.NET Framework 2.0之后出现很多新的知识点.这些知识点更是让 ...

  8. PHP进阶知识

    关于PHP程序员技术职业生涯规划:http://rango.swoole.com/ Micro Service Framework For PHP:https://github.com/pinguo/ ...

  9. 用变量a给出下面的定义。[中国台湾某著名CPU生产公司2005年面试题]

    (1)一个整型数(An integer)(2)一个指向整型数的指针(A pointer to an integer)(3)一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a ...

  10. 1930: [Shoi2003]pacman 吃豆豆

    1930: [Shoi2003]pacman 吃豆豆 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1969  Solved: 461[Submit][ ...