ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # IORM 通常情况下我们推荐使用 IORM 进行数据操作 IORM 对模型依赖,所以项目中一定要有 Model 集合来管理所有的 Model 类 目前只支持**MYSQL**数据库 ## 建模 Model.Comopany ``` [ORMTable(Name = "Company", Prefix = "V1_")] class Company { [ORMColumn(IsPrimaryKey = true)] public string Id { get; set; } [ORMColumnInfo(Comment = "创建时间")] public DateTime CreateTime { get; set; } [ORMColumnInfo(Comment = "更新时间", AutoOnUpdate = true)] public DateTime? UpdateTime { get; set; } [ORMColumnInfo(Comment = "公司名称")] public string CompanyName { get; set; } [ORMColumnInfo(Comment = "省", Nullable = true)] public string Province { get; set; } [ORMColumnInfo(Comment = "市", Nullable = true)] public string City { get; set; } [ORMColumnInfo(Comment = "区", Nullable = true)] public string Country { get; set; } [ORMColumnInfo(Comment = "街道", Nullable = true)] public string Street { get; set; } [ORMColumnInfo(Comment = "经纬度", Nullable = true)] public string LngLat { get; set; } [ORMColumnInfo(Comment = "登录名称")] public string LoginName { get; set; } [ORMColumnInfo(Comment = "登录手机")] public string Mobile { get; set; } [ORMColumnInfo(Comment = "登录密码")] public string Password { get; set; } [ORMColumnInfo(Comment = "登录次数")] public int LoginCount { get; set; } } ``` 如果数据库中未存在`V1_Company`表,程序会自动创建, **注意: 考虑到部分表数据庞大,所以建表操作只在第一次协助维护 如果项目迭代中需要添加模型字段,需要手动修改数据库表结构** ## ORMColumnInfo 通过了解 ORMColumnInfo 我们可以知道自动创建表格时特性的作用 ``` public class ORMColumnInfo : Attribute { /// <summary> /// 类型 /// </summary> public string Type { get; set; } /// <summary> /// 长度 /// </summary> public string Length { get; set; } /// <summary> /// 是否能NULL /// </summary> public bool Nullable { get; set; } /// <summary> /// 默认值 /// </summary> public string Default { get; set; } /// <summary> /// 非负数 /// </summary> public bool UnSign { get; set; } /// <summary> /// 自增 (注意下 Mysql 只能对主键设置自增,Postgre不限制) /// </summary> public bool AutoIncrement { get; set; } /// <summary> /// 时间自动更新 /// </summary> public bool AutoOnUpdate { get; set; } /// <summary> /// 注释 /// </summary> public string Comment { get; set; } } ``` # 数据库实例 MYSQL的底层使用了 MySqlConnector, 关于一些配置说明可以参考 https://mysqlconnector.net/ ## 事务 IORM的事务很简单,并且支持节点回退 ``` db.Begin(); // ...数据库操作 db.Begin("point1") //...数据库操作 db.Begin("point2") //...数据库操作 db.Rollback("point2") db.Rollback() db.Commit(); ``` ## 连接重用 ``` var conn = db.GetConnect(); //可以指定Conn提高连接的重用,否则就会交给底层自动回收 db.Table<T>().SetConnect(conn); ``` ## 回调 ``` static public void DBCallback(IORM.QueryObject queryObject) { Console.WriteLine("语句:{0}", queryObject.Content); Console.WriteLine("时耗:{0} ms", queryObject.ElapsedMilliseconds); } //设置代理生效 IORM.SetQueryCallback(DBCallback); //实例启用回调 db.Table<Model.Company>().DisableQueryCallback(false); ``` 注意:如果回调代理函数内 要讲结果插入数据库一定要启`DisableQueryCallback(true)`,否则会进入死循环!!! ## 防注入说明 内部已经对单引号,双引号,反斜杠做了防注入处理