FreeSql增加新特性Context
源
作者做了很完善的组件
我看了一下,感觉很实用,使用上有很大的可自定义操作的地方,跟传统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
项目地址
我的魔改地址
作者给我的分支地址