1為什么使用sqlsugarcore:
SqlSugar一款輕量級,高性能,支持.Net4.+和ASP.Net Core的一款ORM框架。
對我而言 他可以生成數據庫表模板 可以自己配置模板的參數 在項目中更簡單的直接調用 帶有自定義的快捷查詢語句
2添加一個modelbuild啟動的控制台應用程序 我習慣用分層寫 主要是為了生成model到web解決方案中
2.1 添加一個控制台應用程序
2.2 引用sqlsugarcore Nuget包
2.3 在program中編寫映射實體模型的方法
class Program
{
static void Main(string[] args)
{
//實體生成的路徑
var modelpath = @"SqlSugarCoreDemo\Models";
var path = Directory.GetCurrentDirectory();
path = path.Substring(0, path.IndexOf(@"\bin"));
//聲明實體生成的絕對路徑
path = path.Substring(0, path.LastIndexOf(@"\") + 1) + modelpath;
var db = new SqlSugarClient(new ConnectionConfig()
{
//連接字符串
ConnectionString = @"Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=LocalDB;Data Source=.",
//連接的數據庫的類型
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
//獲取所有表
List<DbTableInfo> list = db.DbMaintenance.GetTableInfoList();
//獲取所有視圖
List<DbTableInfo> viewList = db.DbMaintenance.GetViewInfoList();
var allList = list.Concat(viewList);
//循環所有的表和視圖 他們屬於同一個類 DbTableInfo
foreach (DbTableInfo table in allList)
{
//首字母轉大寫
string table_name = table.Name.Substring(0, 1).ToUpper() + table.Name.Substring(1);
//映射表增加 實體名稱 和表名稱
db.MappingTables.Add(table_name, table.Name);
//根據表名 獲取表所有的字段
List<DbColumnInfo> dd = db.DbMaintenance.GetColumnInfosByTableName(table.Name);
foreach (DbColumnInfo item in dd)
{
//映射字段添加 (字段名,字段名,表名)
db.MappingColumns.Add(item.DbColumnName, item.DbColumnName, table_name);
}
db.DbFirst.
SettingClassTemplate(old =>
{
return old;
//這里是自定義的模板 當你定義模板時 請注意格式的縮減距離 要不然會導致生成的模板格式很奇怪
// return GetClassTemplate();
})
.SettingNamespaceTemplate(old =>
{
return old;
})
.SettingPropertyDescriptionTemplate(old =>
{
return old;
//這里是自定義的模板
//return GetPropertyDescriptionTemplate();
})
.SettingPropertyTemplate(old =>
{
return old;
})
.SettingConstructorTemplate(old =>
{
return old;
}).IsCreateAttribute().Where(table.Name).CreateClassFile(path, "ZSCQYQSJPT.Web.Models");
}
}
/// <summary>
/// 這是自定義的命名空間的模板
/// </summary>
/// <returns></returns>
static string GetClassTemplate()
{
return @"
{using}
namespace {Namespace}
{
{ClassDescription}{SugarTable}
public partial class {ClassName}:ModelContext
{
public {ClassName}()
{
{Constructor}}{PropertyName}}
}";
}
/// <summary>
/// 這是自定義的字段的模板
/// </summary>
/// <returns></returns>
static string GetPropertyDescriptionTemplate()
{
return @"
/// <summary>
/// Remark:{PropertyDescription}
/// Default:{DefaultValue}
/// Nullable:{IsNullable}
/// </summary>";
}
}
2.4 我們啟動控制台應用程序
2.5 可以看到我們program中配置的路徑已經生成了相應的模板
3 在web程序中調用sqlSugarcore操作數據庫
3.1 首先創建一個web應用程序 API還是MVC都可 注意Nuget包引用sqlsugarcore
3.2 創建一個類 主要是用於連接數據庫的類 它會作為后續增刪改查的sql幫助類的基類
public class DbContext
{
public SqlSugarClient db;
public DbContext()
{
if (db == null)
{
db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=LocalDB;Data Source=.",//必填, 數據庫連接字符串
DbType = DbType.SqlServer, //必填, 數據庫類型
IsAutoCloseConnection = true, //默認false, 時候知道關閉數據庫連接, 設置為true無需使用using或者Close操作
InitKeyType = InitKeyType.SystemTable //默認SystemTable, 字段信息讀取, 如:該屬性是不是主鍵,是不是標識列等等信息
});
}
}
}
3.3 然后創建一個幫助類 主要是對Local表在sqlsugarcore框架下的增刪改查 需要繼承DbContext 因為到時候控制器直接調用Helpservices 會執行基類DbContext 的構造函數 並對數據庫 SqlSugarClient db賦值。用於直接操作數據庫。
public class Helpservices : DbContext
{
/// <summary>
/// 增加
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool AddAsync(Local model)
{
return db.Insertable(model).ExecuteCommand() > 0;
}
/// <summary>
/// 批量刪除
/// </summary>
/// <param name="Llist"></param>
/// <returns></returns>
public async Task<bool> DeleteAsync(List<Local> Llist)
{
var result = true;
db.Ado.BeginTran();
try
{
foreach (var item in Llist)
{
if (await db.Deleteable(item).ExecuteCommandAsync() >= 0)
{
result = true;
}
}
}
catch (Exception)
{
result = false;
}
if (result)
{
db.Ado.CommitTran();
}
else
{
db.Ado.RollbackTran();
}
return result;
}
/// <summary>
/// 查詢列表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public List<Local> ListAsync(Local model)
{
var result = db.Queryable<Local>().Where(w => w.sendtime == "ajfhjah").OrderBy("status desc").ToList();
return result;
}
/// <summary>
/// 查詢單條信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public Local SingleAsync(Local model)
{
return db.Queryable<Local>().Single(it => it.ID == model.ID);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool UpdateAsync(Local model)
{
return db.Updateable(model).UpdateColumns(it => new { it.sendtime, it.backtime, it.status }).Where(it => it.ID == model.ID).ExecuteCommand() > 0;
}
}
3.4 實操 在控制器中調用
下面是我實操的數據庫類
///<summary>
///
///</summary>
[SugarTable("Local")]
public partial class Local
{
public Local()
{
}
/// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public Guid ID { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string sendtime { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string backtime { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public int? status { get; set; }
}
下面是具體實操調用內容
Helpservices helpservices = new Helpservices();
//增加
Local local = new Local();
local.ID = Guid.NewGuid();
local.sendtime = "ajfhjah";
local.backtime = "ryey";
local.status = 46;
var result = helpservices.AddAsync(local);
//查單條
Guid id = new Guid("0d6c0f7c-685a-4bb2-8de1-37f7be6c5832");
var singlocal = helpservices.SingleAsync(new Local { ID = id });
//查列表
var listlocal = helpservices.ListAsync(new Local { });
//修改
var updatelocal = helpservices.UpdateAsync(new Local { ID = id, sendtime = "我是測試1", backtime = "我是測試2", status = 32 });