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(, "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的更多相关文章
- 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 ...
- EF是啥?【What is Entity Framework?】(EF基础系列2)
EF产生的背景: 编写ADO.NET访问数据的代码,是沉闷而枯燥的,所以微软提供了一个对象关系映射框架(我们称之为EF),通过EF可以自动帮助我们的程序自动生成相关数据库. Writing and m ...
- threading模块和queue模块实现程序并发功能和消息队列
简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...
- winform 发布应用程序 提示 “未能注册模块(程序路径)\ieframe.dll”
程序安装的时候出现未能注册模块(程序路径)\ieframe.dll提示 这种情况的出现,是因为引用的shdocvw.dll,目前发现了一个折中的解决方法,在安装程序里面,可以看到ieframe.dll ...
- 使用EF访问数据库,出现“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。
今天在使用的EF时候,发生了"System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常.这样的一个错误 查了原因,原来是appconf ...
- iis重写模块实现程序自动二级域名,微软提供的URL重写2.0版本适用IIS以上
在iis7以后微软提供了url重写2.0版本,可以通过安装重写组件来实现.适用于iis7以上版本. 安装有两种方式可以选择,一是下载安装文件,二是通过“web平台安装程序”安装 1.下载安装文件 下载 ...
- URL重写及ASP.NET路由、Http处理模块、程序等
这段时间在学习ASP.NET路由.HTTP处理等内容,了解了一些,但又未完全弄懂,似是而非,不管如何,作一总结,供日后借鉴和修改. 一.IIS6和IIS7经典模式和集成模式 在IIS6及IIS7经典模 ...
- Java程序员常用的@Component、@Repository、@Controller、@Service系列【案例demo3】
Java程序员常用的@Component.@Repository.@Controller.@Service系列[案例demo3] 很多程序员通过在类上使用@Repository.@Componen ...
- Java 编写小程序,下载指定网页上的所有图片
使用Java编写一个小程序,可以根据指定的网页地址,下载网页中的所有图片:使用到网络编程.线程池.IO和UUID的技术.具体代码如下: import java.io.File; import java ...
随机推荐
- java equals与==区别
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(== ...
- mybatis性能优化之降低数据库连接
做性能优化的最重要的功能就是降低数据库的交互.非常多程序猿一般在开发的时候仅仅考虑简单的实现功能,无论业务简单复杂,仅仅要实现即可. mybatis有个重要的功能就是考虑在联合查询时技巧: <? ...
- HDMI原理图信号PIN脚
HDMI(19Pin)/DVI(16 pin)的功能是热插拔检测(HPD),这个信号将作为主机系统是否对HDMI/DVI是否发送TMDS信号的依据.HPD是从显示器输出送往计算机主机的一个检测信号.热 ...
- 使用Nginx的proxy_cache缓存功能取代Squid
Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...
- Flume-1-7-0用户手册
介绍 概述 Apache Flume是为有效收集聚合和移动大量来自不同源到中心数据存储而设计的可分布,可靠的,可用的系统. Apache Flume的用途不仅限于日志数据聚合.由于数据源是可定制的,F ...
- eclipse--windowBuilder
https://www.eclipse.org/windowbuilder/ https://www.eclipse.org/windowbuilder/download.php Documentat ...
- Unix中库的使用
库有点像java中的jar包,但是使用起来要比jar包要麻烦一点. 库分为静态编程库和动态链接库两种. 库一旦设计出来就需要被可执行程序链接和调用. 可执行程序在编译时直接载入静态编程库,在运行时直接 ...
- Spark源码分析之七:Task运行(一)
在Task调度相关的两篇文章<Spark源码分析之五:Task调度(一)>与<Spark源码分析之六:Task调度(二)>中,我们大致了解了Task调度相关的主要逻辑,并且在T ...
- (个人开源)ffpanel --ffmpeg的GUI,让ffmpeg离开黑黑的命令行
程序及源代码下载地址 :https://github.com/langsim/ffpanel
- idea 的IDE
idea 是与eclipse齐名的IDE(集成开发工具),以智能闻名,不过对于熟悉eclipse的的用户来说,初次接触idea有些让人搞不清方向,下面介绍一下简单的使用 方式. 1.安装 官网下载ul ...