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, 不过先卖个关子,等下次讲。

读写分离子系统 - C# SQL分发子系统 - Entity Framework支持的更多相关文章

  1. 读写分离子系统 - C# SQL分发子系统(ADO.NET,不支持EF)

    读写分离子系统 - C# SQL分发子系统(ADO.NET,不支持EF) 这次介绍的这个框架只适用于中小项目,并且各个读写数据库结构是一致的情况,还要并且是写入数据库只有1台情况. 我们来看看这个子系 ...

  2. 读写分离子系统 - C# SQL分发子系统(目前只支持ADO.NET)

    这次介绍的这个框架只适用于中小项目,并且各个读写数据库结构是一致的情况,还要并且是写入数据库只有1台情况. 我们来看看这个子系统适用的场景: 我们来看这个子系统的配置文件: <?xml vers ...

  3. Executing Raw SQL Queries using Entity Framework

    原文 Executing Raw SQL Queries using Entity Framework While working with Entity Framework developers m ...

  4. [VSTS]让ADO.NET Entity Framework支持Oracle数据库(转载)

    近期由于项目所需不得不研究Oracle数据库,回想上一次用Oracle还是07年的事情,实习时候做华晨宝马的项目简单接触了Oracle.这次的项目需要基于.NET平台,我个人的习惯是能用微软自带的就不 ...

  5. Entity Framework入门教程: Entity Framework支持的查询方式

    Entity Framework支持的查询方式有三种 LINQ to Entities Entity SQL Native SQL [LINQ to Entities] LINQ(语言集成查询)是从V ...

  6. 让ADO.NET Entity Framework支持Oracle数据库

    Oracle最近发布了 Oracle Data Access Component(ODAC)11. 2 Rel 4,其中增加了对 Entity Framework 4.1 和4.2的支持.这让 .NE ...

  7. 让ADO.NET Entity Framework 支持ACCESS数据库

    如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 接到一个程序和网页交互的项目,用ADO.NET ...

  8. Entity Framework 支持 DataTable

    转载:http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html https://www.cnblogs.com/hanjun0612 ...

  9. 让Entity Framework支持MySql数据库(转载)

    转载地址:http://www.cnblogs.com/wintersun/archive/2010/12/12/1903861.html Entity Framework 4.0 也可以支持大名鼎鼎 ...

随机推荐

  1. SQL Server如何定位自定义标量函数被那个SQL调用次数最多浅析

    前阵子遇到一个很是棘手的问题,监控系统DPA发现某个自定义标量函数被调用的次数非常高,高到一个离谱的程度.然后在Troubleshooting这个问题的时候,确实遇到了一些问题让我很是纠结,下文是解决 ...

  2. java----八种排序算法

    1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数……直 ...

  3. HBase快速安装

    配置hbase-env.sh #JAVA_HOME 需要Java 1.7+ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ # Java CLA ...

  4. 三、Tableau筛选器的使用

    一.使用筛选器制作联动效果 注意,下面两幅图以‘是否盈利’来添加颜色标签 图一:地图 图二:月度销售客户细分 图三:月度销售产品类别 1.新增仪表盘:将图一.图二.图三拉进同一个仪表盘 2.在图一原图 ...

  5. June. 20 2018, Week 25th. Wednesday

    Be brave. Take risks. Nothing can substitute experience. 要敢于冒险,你的经历是无可替代的. From Paulo Coelho. Each s ...

  6. reportComplaints.js: Uncaught TypeError: Cannot read property 'message' of undefined

    vonic 中遇到这么个问题, 一直提示我未定义, 可是明明有定义 var tab={ message:{ number:'', title:'' } } var id= { template: '# ...

  7. j旧学习

    多态的动态绑定: 签名 方法名和参数列表  不同参数叫重载,覆盖父类签名叫覆盖 类加 final不可继承 方法加final不可覆盖 强制类型转换  (类型)对象 抽象类 只要有一个抽象方法就是抽象类, ...

  8. 远程连接排错-屌丝去洗浴中心之路(windows)

    1.查看道路是否通畅 ip地址是什么:就是我们要找的服务器在哪里 公网IP地址:全世界的任何地方都能访问到 私网IP地址:也指内网,私有环境,只在当前环境中.比如:192.168.0.??? 或者 1 ...

  9. python六十四课——高阶函数练习题(三)

    案例五:求两个列表元素的和,返回新列表lt1 = [1,2,3,4]lt2 = [5,6]效果:[6,8,10,12] lt1=[1,2,3,4] lt2=[5,6] print(list(map(l ...

  10. OLTP与OLAP的区别

    OLTP和OLAP的区别 联机事务处理OLTP(on-line transaction processing) 主要是执行基本日常的事务处理,比如数据库记录的增删查改.比如在银行的一笔交易记录,就是一 ...