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

  • 相关阅读:
    .NET 4.5 异步IO
    使用MANIFEST.MF文件来track War包做持续部署
    .NET 4.5 压缩
    自定义实现URL重写 04.18
    对.Net Framework的认识
    那点所谓的分布式——memcache
    不能选择FreeTextBox下拉列表框
    实战架构设计
    LoadRunner压力测试心得总结
    JavaScript的模块化:封装(闭包),继承(原型)
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3805728.html
Copyright © 2020-2023  润新知