首页 > 其他 > 详细

EF Core读写分离

时间:2020-06-12 22:59:03      阅读:87      评论:0      收藏:0      [点我收藏+]
创建dbcontext文件

新建EFCoreContext.cs文件

public class EFCoreContext : DbContext
{
    private string strConn = "";

    public EFCoreContext(string conn)
    {
          
    }
      
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(strConn);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    }
}
创建dbcontext工厂类

新建IDbContextFactory.cs

public interface IDbContextFactory
{
    public EFCoreContext CreateContext(WriteAndReadEnum writeAndRead);
}

创建operationEnum.cs实现数据库操作动作

public enum operationEnum
{
    Write,
    Read,
    Delete
}

新建DbContextFactory.cs实现接口

public class DbContextFactory : IDbContextFactory
{
    private IConfiguration _Configuration;

    private string[] ReadConnectionString = null;

    public DbContextFactory(IConfiguration configuration)
    {
        _Configuration = configuration;
        ReadConnectionString = _Configuration.GetConnectionString("ReadDataBase").Split(",");
    }
    public EFCoreContext CreateContext(operationEnum writeOrRead)
    {
        string sqlConn = string.Empty;
        switch (writeOrRead)
        {
            case operationEnum.Write:
                sqlConn = _Configuration.GetConnectionString("WriteDataBase");
                break;
            case operationEnum.Read:
                sqlConn = GetReadConnectionString();
                break;
            default:
                break;
        }
        return new EFCoreContext(sqlConn);
    }

    /// 可以自定义从库的数据库连接策略
    private string GetReadConnectionString()
    {
        ///随机策略
        //权重策略
        //轮询策略
        return ReadConnectionString[0];
    }
}

然后在startup.cs中注入

services.AddScoped<IDbContextFactory, DbContextFactory>();

然后就可以在controller使用

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IDbContextFactory _DbContextFactory;

    public HomeController(ILogger<HomeController> logger, IDbContextFactory dbContextFactory)
    {
        _logger = logger;
        _DbContextFactory = dbContextFactory;
    }

    public IActionResult Index()
    {
        EFCoreContext writecontext = _DbContextFactory.CreateContext(operationEnum.Write);

        ......

        writecontext.SaveChanges();

        EFCoreContext queyrcontext = _DbContextFactory.CreateContext(operationEnum.Read);

        .......

        return View();
    }
}

EF Core读写分离

原文:https://www.cnblogs.com/hwxing/p/12906388.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!