zoukankan      html  css  js  c++  java
  • petaPoco

    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.实例化:

    DataBase db = new Database(ConfigurationManager.ConnectionStrings["XE"]);

    2.查询:

    var v = db.Fetch<cls>("")
     

    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();

  • 相关阅读:
    腾讯// 反转字符串
    腾讯//Multiply Strings 字符串相乘
    腾讯//盛最多水的容器
    腾讯//删除排序数组中的重复项
    腾讯//删除排序数组中的重复项
    C语言中的预处理命令
    Python十大应用领域与就业方向
    Python的主要应用领域及应用场景
    Git命令_git status
    Git命令_git add快速添加文件到暂存区
  • 原文地址:https://www.cnblogs.com/jobs2/p/3411016.html
Copyright © 2011-2022 走看看