zoukankan      html  css  js  c++  java
  • Orm框架

    petaPoco出现在2011年...因此老鸟可忽略该贴...目前最新版是 5.0, 但核心文件变化不大.

    在众多的ORM框架中, 其中不乏非常优秀的EF, 但今天仍然想写点关于PetaPoco的文字 ... 是因为有几个项目一直在使用petaPoco, 原因有2点:
    1. 轻量级, 高性能
    2. 个人偏向DataBase First的开发方式, 原因在于Toad for Oracle工具创建数据库对象迅速, 各种方便, 胜过Code First模式创建类的速度.(此处抛开各种设计模式,各种理论).

    ------------------------------------------------------------------------------

    开发准备:
    1.通过Nuget添加 petaPoco的引用 
    2.在app.config文件中加入 <connectionStrings> 节点, 并配置connectionString, providerName属性.
    3.打开 DataBase.tt , 修改 ConnectionStringName,以及 Namespace , Namespace, 保存以后VS会自动执行模板文件,并生成实体类文件: DataBase.Cs

    ------------------------------------------------------------------------------

    使用方法:
    1.实例化:

    C# code
     
    ?
    1
    DataBase db = new Database(ConfigurationManager.ConnectionStrings["XE"]);



    2.查询:

    C# code
     
    ?
    1
    var v = db.Fetch<cls>("")



    3.增 / 改 / 删

    C# code
     
    ?
    1
    2
    3
    Cls.Insert();  
    cls.Update(); 
    Cls.Delete();



    支持事务以及多实体关联, 更详细的使用可以参考官网给出的Demo: http://www.toptensoftware.com/petapoco/

    ------------------------------------------------------------------------------

    T4对Oracle支持并不好, 有比较多的Bug, 因此我把项目中遇到的Bug, 以及需要修改的地方:

    1.T4实体类的Update方法 , 根据ModifiedColumns 是否为Null判断实体中是否被更新,需要修改 PetaPoco.Generator.ttinclude文件第114行, 改为 if (ModifiedColumns == null || ModifiedColumns.Count == 0) 进行判断.

    2.模板所生成的所有类,主键是否为自增属性始终为true, 原因 PetaPoco.Core.ttinclude 中的OracleSchemaReader 类, LoadColumns方法中 col.IsAutoIncrement 始终为true, 改为:
    col.IsAutoIncrement=col.PropertyType != "string";

    3.Oracle 数据库数据类型字段允许为空, 但类型中没有自动加上"?"
    修改PetaPoco.Core.ttinclude第1216行, 将"YES"改为"Y", col.IsNullable=rdr["IsNullable"].ToString()=="Y";
    并在第179行, 增加 col.PropertyType !="DateTime"  判断.

    其他Bug不再一一列出, 最后附上T4 模板的调试方法,方便大家遇到问题自己快速定位和优化 :
    1. .ttinclude文件的第一行修改为 <#@ template language="C#" debug="true" hostspecific="True" #>
    2. 在需要调试的代码片断附近加入: System.Diagnostics.Debugger.Launch();

  • 相关阅读:
    js简单验证码的生成和验证
    基本够用的php.ini配置文件(CentOS7)
    转发:CentOS下tar压缩排除某个文件夹或文件及解压
    阿里云服务器CentOS7 vsftp安装、设置及后台端口的设置
    转发:entos7修改文件夹权限和用户名用户组
    转发:查看centos中的用户和用户组
    阿里云服务器CentOS7怎么分区格式化/挂载硬盘
    php调试用的几个小方法
    Jquery实现日期转换为 Unix时间戳及时间戳转换日期
    Jquery计算时间戳之间的差值,可返回年,月,日,小时等
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3805728.html
Copyright © 2011-2022 走看看