C# ORM框架 开源

ORM源码: https://github.com/dewfn/SmiteRepository

SmiteRepository

.NET ORM框架,基于Dapper效率高,操作实体类就可以实现数据库操作,很简单方便。联系 [email protected]


  1. 根据条件Update,Delete有修改字段,不会Update全字段,Insert也是。
  2. 各种表ORM查寻:Find,FindAll,Max,Min,Count,Scalar,Exists,Sum,操作简单。
  3. Find ,FindAll 可指定 输出列,更好节省资源、合理利用索引
  4. 支持原始SQL语句操作
  5. 支持分库,简单高效分页
  6. 分表(非侵入式)。
  7. 支持with(nolock) 可设置
  8. 可注册拦截所有SQL,记录日志或修改SQL

Dao层类,继承BaseRepository,BaseOracleRepository,BaseMysqlRepository 其中一个,根据数据库,
实现基类的构造函数传入数据库连接,在当前类中就可以调用基类中的各种数据库操作方法

public class TestRepository: BaseRepository
  {
            public TestRepository() : base("你的数据库连接") { }
             public List Get()
            {
                List p = base.Query(
                "select a.age,a.keys,z.class as classname from a_testzhu z left join  a_testage a on z.keys=a.keys where a.id>7000" );
                return p;
            }
}

TestRepository testRp=new TestRepository(); 
IORMRepository ormTest= testRp.For();   //得到一个ORM操作类,

ormTest支持Find,FindAll,Max,Min,Count,Update,Delete,Exists,Sum等等常用方法,使用表达式调用

List l= ormTest.FindAll(t=> t.Id>7000); 查寻所有Id>7000的
Test t=new Test(); 
t.Sex=2
t.Name="test";
ormTest.Update(t,w=> w.Id>7000);  //修改Id>7000的数据Sex为2,Name为test

Update与Insert只会持久化有赋值的字段 到数据库

 var k = ormTest.FindAll( where => where.Sex == 4,(display, F) => display(F.Name));

取得Test表中所有Sex等于4的,只会查Name一个字段。

———————————-自动生成实体 data目录下
EntityGenerate.tt, Base.ttinclude, MSSQL.ttinclude(mssql)把文件放在项目中
修改EntityGenerate.tt里的命名空间,数据库连接,可自动生成与表一样的实体文件EntityGenerate.cs,文件内包括所有实体
EntityGenerate.tt文件如下

<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ include file="Base.ttinclude" #>
<#@ include file="MSSql.ttinclude"  #>

<#

    ConnectionString = "Data Source=192.168.1.1;Initial Catalog=test;User ID=test;Password=Password;";
    Namespace       = "com.dewfn.Entities"; //生成实体类的命名空间
    DataContextName = "DataContext";
    BaseEntityClass = "BaseEntity";  //基类
    RenderForeignKeys = false;
    RenderBackReferences = false;

Usings = new List<string>()
{
    "System",           //引用的命名空间
    "SmiteRepository"   //引用的命名空间
};


    GenerateModel();

#> 

配置好,保存一下就会生成 EntityGenerate.cs 文件

    [TableName("Test")]
    public partial class Test : BaseEntity
    {
        private int _id;
        /// 
        /// 
        ///  int(10) 
        /// 
        [Identity, PrimaryKey(1)] 
        public int Id
        { get{ return _id; }    set{ _id = value ;  OnPropertyChanged("Id"); } }
        private string _name;
        /// 
        /// 
        ///  nvarchar(50)
        /// 

        public string Name
        { get{ return _name; }  set{ _name = value ;  OnPropertyChanged("Name"); } }
    }

你可能感兴趣的:(ORM)