A2D Framework增加了EF支持,加上原先支持ADO.NET:

  1. 支持EF方式
  2. 支持ADO.NET方式

这次来讲如何让Entity Framework变成nb的读写分离

1. 先设计EF模型, 可以图形方式设计,也可以数据库优先方式设计,总之设计完后,再转换成Code方式使用(用)

2. 在DbContext类中,删除EF自动添加的报错代码,如下:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();//直接删除这句
}

3. 在根目录中增加A2D配置文件A2D.config:

<?xml version="1.0" encoding="utf-8" ?>
<A2D>
<SQLDispatcher>
<WritableDB>server=192.168.1.20;User ID=sa;Password=;database=DFH;Connection Reset=FALSE</WritableDB>
<ReadDBs>
<DB>server=192.168.1.21;User ID=sa;Password=;database=DFH;Connection Reset=FALSE</DB>
<DB>server=192.168.1.22;User ID=sa;Password=;database=DFH;Connection Reset=FALSE</DB>
</ReadDBs>
</SQLDispatcher>
</A2D>

4. 编写查询接口、查询Impl

interface IOrder
{
[SQLDispatcher]
List<Order> QueryOrders(string keyword);
}
[AOPServiceEnabled]
class OrderImpl : ContextBoundObject, IOrder
{
private IRepository repository = ObjectFactory.Resolve<IRepository>(); public List<Order> QueryOrders(string keyword)
{
List<Order> orders=repository.Get<Order>(filter: w => w.FirstName.IndexOf(keyword)>=);
return orders;
}
}

5. 注入EF的SQL Dispatcher对象

A2DConfig.LoadConfig();

ObjectFactory.Register<DbContext, MyEntities>();//MyEntities是第二步中T4生成的那个DbContext class
ObjectFactory.Register<IRepository, IntelligentEFRepository>(); ObjectFactory.Register<IOrder, OrderImpl>();//注册Order的实现逻辑类 var bl = ObjectFactory.Resolve<IOrder>(); List<Order> orders=bl.QueryOrders("test");

搞定。

其他:A2D.config中,还可以加入Region的概念,如下:

<SQLDispatcher>
<WritableDB>Server=.;Database=d1;User Id=sa;Password=111111;</WritableDB>
<ReadDBs>
<DB>Server=.;Database=d2;User Id=sa;Password=111111;</DB>
<DB>Server=.;Database=d3;User Id=sa;Password=111111;</DB>
<DB>Server=.;Database=d4;User Id=sa;Password=111111;</DB>
</ReadDBs>
<DedicatedReadDBs>
<DedicatedRegion>
<Region>Optimization_Sales</Region>
<DB>Server=.;Database=d5;User Id=sa;Password=111111;</DB>
<DB>Server=.;Database=d6;User Id=sa;Password=111111;</DB>
</DedicatedRegion>
<DedicatedRegion>
<Region>Optimization_HR</Region>
<DB>Server=.;Database=d7;User Id=sa;Password=111111;</DB>
</DedicatedRegion>
</DedicatedReadDBs>
</SQLDispatcher>

也就是所有的读操作可以刻意指定由哪台db来处理,比如某台server性能比较好,或者某台server专门给某语句做了极端优化。。。

此时就能用上面这个配置文件,当然C#那边也要修改成匹配的Region:

interface IOrder
{
[SQLDispatcher("Optimization_Sales")] //这样,这句sql调用就会被redirect到专门为sales做过优化的那台server(也能支持多台)了
List<Order> QueryOrders(string keyword);
}

Caution:这种技术需要搭配Sql server的复制高级功能才能实现数据在master与slaves之间复制,这个技术请大家自己搞定吧(考虑到底延时),我没有多少经验(demo过而已,你懂的,哈哈,请大家请教真正的DBA来做这事吧)

BUT:其实,有个办法能绕过上面这个Caution, 不过先卖个关子,等下次讲。

最新文章

  1. php 不用四舍五入的方式截取小数点后两位
  2. Linux的文件时间
  3. Windows搭建SVN
  4. 非常详细的docker学习笔记
  5. 高动态范围光照(High Dynamic Range Imaging,简称HDRI或HDR)
  6. Hadoop MapReduce编程 API入门系列之mr编程快捷键活用技巧详解(四)
  7. [LeetCode#204]Factorial Trailing Zeroes
  8. 传值 UI考试知识点
  9. .Net开源oss项目进度更新(含小程序接口)
  10. 互联网二次进化—VR全景智慧城市
  11. JAVA基础面试(二)
  12. scala(二) Future执行逻辑解读
  13. 内存数据网格hazelcast的一些机制原理
  14. Beta冲刺! Day1 - 磨刀
  15. 线性代数的本质与几何意义 01. 向量是什么?(3blue1brown 咪博士 图文注解版)
  16. Warning: 执行完毕, 但带有警告 trigger trigger_EqPic_insert 已编译。
  17. identify.class.php&lt;======&gt;token加密方法
  18. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)
  19. Eclipse的实用插件
  20. 【转载】实现UTF8与GB2312编码格式相互转换(VC)已经验证!

热门文章

  1. socket通讯,TCP,UDP,HTTP的区别
  2. Python textwrap模块(文本包装和填充)
  3. mssql sqlserver 优化注意事项:
  4. AngularJS学习之旅—AngularJS 简介(一)
  5. Linux shell编写端口扫描脚本
  6. 利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果
  7. php配置文件php.ini的详细解析
  8. June 1. 2018 Week 22nd Friday
  9. Spring AOP 术语
  10. 力扣算法题—052N皇后问题2