zoukankan      html  css  js  c++  java
  • FreeSql增加新特性Context

    FreeSql

    作者做了很完善的组件

    我看了一下,感觉很实用,使用上有很大的可自定义操作的地方,跟传统Orm固定格式不同,也异于Dapper的设计,支持表达式树

    原地址

    https://www.cnblogs.com/kellynic/p/10310484.html

    关于魔改的内容

    个人感觉很喜欢~就魔改了一下,增加了一个上下文

    顾名思义,界定数据源的,这个设计其实是仿EF的,因为很多高仿Dapper的组件都是依赖于连接对象,做的一组扩展方法

    在中大型系统里面,可能有一组产品,每个有独立的数据库,彼此之间又有关联性,上下文是一组独立的数据源

    我们只关注上下文去操作数据即可

        public class UserModel
        {
            public string Account { get; set; }
            public string Nickname { get; set; }
            public string Email { get; set; }
        }
    
        public class LogModel
        {
            public UserModel User { get; set; }
            public DateTimeOffset Time { get; set; }
        }
    
        public class UserContext : FreeSqlDbContext
        {
            public FreeSqlDbSet<UserModel> Users { get; set; }
            public FreeSqlDbSet<LogModel> Logs { get; set; }
    
            public UserContext(FreeSqlBuilder build) : base(build)
            {
            }
        }

    这个UserContext就是一个上下文

                var connstr = "Data Source=D:\db\_Cache.db;Pooling=true;FailIfMissing=false";
                var factory = new FreeSqlDbContextFactory();
    
                var context = factory.GetOrAdd<UserContext>(
                    new FreeSqlBuilderConfiguration()
                        .UseConnectionString(FreeSql.DataType.Sqlite, connstr)
                        //.UseSlave("connectionString1", "connectionString2") //使用从数据库,支持多个
    
                        .UseMonitorCommand(
                            cmd => Console.WriteLine(cmd.CommandText), //监听SQL命令对象,在执行前
                            (cmd, traceLog) => Console.WriteLine(traceLog)) //监听SQL命令对象,在执行后
    
                        .UseLogger(null) //使用日志,不指定默认输出控制台 ILogger
                        .UseCache(null) //使用缓存,不指定默认使用内存 IDistributedCache
    
                        .UseAutoSyncStructure(true) //自动同步实体结构到数据库
                        .UseSyncStructureToLower(true) //转小写同步结构
    
                        .UseLazyLoading(true) //延时加载导航属性对象,导航属性需要声明 virtual
                );

    这个context内的Users和Logs是操作UserModel和LogModel的入口

    比如以前的IFreeSql.Insert<UserModel>(UserModel model)

    则改为

    context.Users.Insert

    项目地址

    我的魔改地址

    FreeSql魔改

    作者给我的分支地址

    FreeSqlContext

  • 相关阅读:
    swift 中 Self 与self
    Swift 中的泛型
    mac 报文件已损坏 怎么办
    winxp秘钥
    字符串拷贝函数strcpy, strcat, sprintf, strncpy, strncat和snprintf的区别
    【原创】Linux应用程序完整调用自己写的字符设备驱动过程
    idea中新建git分支,并提交到远程github
    (JS-PHP)使用RSA算法进行加密通讯
    Linux日志相关的命令
    hibernate中关于is null的查询
  • 原文地址:https://www.cnblogs.com/NCoreCoder/p/10314961.html
Copyright © 2011-2022 走看看