[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)`,否则会进入死循环!!!
## 防注入说明
内部已经对单引号,双引号,反斜杠做了防注入处理