首页 新闻 搜索 专区 学院

Entity Framework是否可以实现读写分离

0
悬赏园豆:5 [已解决问题] 解决于 2015-12-29 15:04

Entity Framework在开发过程中确实可以带来很多方便,但是在考虑数据库压力方面想实现数据库的读写分离,请问Entity Framework是否可以实现读写分离,如何做?

谢谢

绥山潇洒哥的主页 绥山潇洒哥 | 初学一级 | 园豆:100
提问于:2013-05-30 10:38
< >
分享
最佳答案
0

如果是 EF6.1 以上版本,实现读写分离是可以的,不过前期是dbms系统支持主从复制功能,具体见我的博文:

http://www.cnblogs.com/cjw0511/p/4391092.html

收获园豆:3
枫桥流云 | 菜鸟二级 |园豆:209 | 2015-04-05 16:57
if (command.CommandText.ToLower().StartsWith("insert", StringComparison.InvariantCultureIgnoreCase) == false)
          {
              // 判断当前会话是否处于分布式事务中
              bool isDistributedTran = Transaction.Current != null &&
                                       Transaction.Current.TransactionInformation.Status !=
                                       TransactionStatus.Committed;
              foreach (var context in interceptionContext.DbContexts)
              {
                  //判断该 context 是否处于普通数据库事务中
                  bool isDbTran = context.Database.CurrentTransaction != null;
 
                  // 如果处于分布式事务或普通事务中,则“禁用”读写分离,处于事务中的所有读写操作都指向 Master
                  string connectionString = isDistributedTran || isDbTran ? this.MasterConnectionString : this.SlaveConnectionString;
                  if (command.Connection.State == ConnectionState.Open)
                  {
                      command.Connection.Close();
                  }
                  command.Connection.ConnectionString = connectionString;
                  command.Connection.Open();
              }
          }

读写分离实现了,但此处open的链接却无法自动关闭,不知有何好的办法呢

晓道 | 园豆:297 (菜鸟二级) | 2016-08-15 16:35
其他回答(2)
0

可以的, 我是通过修改Model.Context.tt增加一个参数是连接串的构造函数来完成的

收获园豆:1
悟了 | 园豆:521 (小虾三级) | 2013-05-30 11:02

可以说详细点吗???

支持(0) 反对(0) Youngming | 园豆:202 (菜鸟二级) | 2014-11-05 11:13
0

关注一下,没有做过,不过有个思路就是底层还是用数据库镜像,然后ef的model分别关联两个不同的数据库源和镜像,再做操作

收获园豆:1
WuRang | 园豆:1730 (小虾三级) | 2013-05-30 11:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册