Entity Framework在开发过程中确实可以带来很多方便,但是在考虑数据库压力方面想实现数据库的读写分离,请问Entity Framework是否可以实现读写分离,如何做?
谢谢
如果是 EF6.1 以上版本,实现读写分离是可以的,不过前期是dbms系统支持主从复制功能,具体见我的博文:
http://www.cnblogs.com/cjw0511/p/4391092.html
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的链接却无法自动关闭,不知有何好的办法呢
可以的, 我是通过修改Model.Context.tt增加一个参数是连接串的构造函数来完成的
可以说详细点吗???
关注一下,没有做过,不过有个思路就是底层还是用数据库镜像,然后ef的model分别关联两个不同的数据库源和镜像,再做操作