嘗試過 ado.net、dapper、ef,以及Repository倉儲,甚至本身還寫過生成器工具,以便作常規CRUD操做。git
它們平常操做不方便之處:github
BaseEntity 是一種極簡單的 CodeFirst 開發方式,特別對單表或多表CRUD,利用繼承節省了每一個實體類的重複屬性(建立時間、ID等字段),軟件刪除等功能,進行 crud 操做時沒必要時常考慮倉儲的使用;數據庫
本文介紹 BaseEntity 一種極簡約的 CRUD 操做方法。app
示範項目:https://github.com/2881099/FreeSql/tree/master/Examples/base_entityide
參考 BaseEntity.cs 源碼(約100行),拷貝項目中使用,而後添加 nuget 引用包:函數
dotnet add package FreeSql.Repositorydotnet add package FreeSql.Provider.Sqlite工具
一、定義一個主鍵 int 而且自增的實體類型,BaseEntity TKey 指定爲 int/long 時,會認爲主鍵是自增;ui
public class UserGroup : BaseEntity<UserGroup, int> { public string GroupName { get; set; } }
若是不想主鍵是自增鍵,能夠重寫屬性:.net
public class UserGroup : BaseEntity<UserGroup, int> { [Column(IsIdentity = false)] public override int Id { get; set; } public string GroupName { get; set; } }
有關更多實體的特性配置,請參考資料: https://github.com/2881099/Fr...
二、定義一個主鍵 Guid 的實體類型,保存數據時會自動產生有序不重複的 Guid 值(不用本身指定 Guid.NewGuid());code
public class User : BaseEntity<UserGroup, Guid> { public string UserName { get; set; } }
三、定義多主鍵的實體類型,能夠在 static 構造函數中重寫字段名;
public class User2 : BaseEntity<User2, Guid, int> { static User2() { User2.Orm.CodeFirst.ConfigEntity<User2>(t => { t.Property(a => a.PkId1).Name("UserId"); t.Property(a => a.PkId2).Name("Index"); }); } public string Username { get; set; } }
//添加 var item = new UserGroup { GroupName = "組一" }; item.Insert(); //更新 item.GroupName = "組二"; item.Update(); //添加或更新 item.Save(); //軟刪除 item.Delete(); //恢復軟刪除 item.Restore(); //根據主鍵獲取對象 var item = UserGroup.Find(1); //查詢數據 var items = UserGroup.Where(a => a.Id > 10).ToList();
實體類型.Select 是一個查詢對象,使用方法和 FreeSql.ISelect 同樣;
支持多表查詢時,軟刪除條件會附加在每一個表中;
有關更多查詢方法,請參考資料: https://github.com/2881099/Fr...