尝试过 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...