1、配置文件:
  1. 框架默认情况下支持"connectionStrings"的配置方式,如《轮子来袭 vJine.Core Orm 之 01_快速入门》所述;
  2. 框架的进阶设定将支持更为详尽、灵活的配置,而您需要做的只是按照给定的格式增加相应的配置节即可(样例及解释如下)。
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="vJine.Net"><!-- 必须制定:格式及内容固定 -->
<section name="OrmConfig" type="vJine.Core.AppConfig`1[[vJine.Core.ORM.OrmConfig, vJine.Core]], vJine.Core"/>
</sectionGroup>
</configSections>

<connectionStrings>
<add name="Default" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=Test;Integrated Security=True"/>
</connectionStrings> <vJine.Net>
<OrmConfig>
<Adapters Active="false">
<!--
由用户指定扩展的Adapter(继承自vJine.Core.ORM.IDbAdapter),
-->
<Adapter Active="true" name="My_Orm_Adapter" pattern="O_My">
<type>vJineCore_QuickStart.My_Orm_Adapter, vJineCore_QuickStart</type>
</Adapter>
</Adapters>
<Connections>
<!--
后续内容会覆盖此前db.name相同的内容,
connectionStrings中的内会在初始配置时会添加到此段, 字段对应关系如下(name->name,providerName->providerName,connectionString->connectionString) db各属性的意义:
.name: new DataManager(string name)中对应的name,默认(new DataManager())为Default,
.providerName:DbProviderFactories用以创建DbProviderFactory;
.connectionString:DbProviderFactory用以连接数据库的连接字符串
.adapter:Adapter配置节对应的name
.host,.port,.user,.password;作为connectionString的配置项目可单独设置、修改,并在新建DataManager实例时替换相应索引值,
即:connectionString = string.format(connectionString,.host,.port,.user,.password);如果不需要,可不必指定。
.adapter:如果指定则按da.adapter查找对应的adapter.name;否则按db.providerName,db.name的顺序匹配adapter.pattern
-->
<db name="O_My_Test" providerName="System.Data.SQLite" adapter="SQLite" host="{0}" port="{1}">
<connectionString>Data Source=default_data.db;Version=3;Pooling=True;Max Pool Size=100;</connectionString>
<user>{2}</user>
<password>{3}</password>
</db> <db name="SQLite" providerName="System.Data.SQLite" adapter="SQLite">
<connectionString>Data Source=default_data.db;Version=3;Pooling=True;Max Pool Size=100;</connectionString>
</db> <db name="MySQL" providerName="MySql.Data.MySqlClient" host="127.0.0.1" port="3306">
<user>root</user>
<password>******</password>
<connectionString>server={0};charset=utf8;User Id={2};Password={3};database=test;Persist Security Info=True</connectionString>
</db>
<db name="Oracle" providerName="Oracle.DataAccess.Client" host="XE">
<user>SYSTEM</user>
<password>******</password>
<connectionString>DATA SOURCE={0};PERSIST SECURITY INFO=True;USER ID={2};Password={3}</connectionString>
</db>
</Connections>
<Converters Active="true">
<!--
类型转换定义,用于引用(用以提供系统默认类型转vJine.Core.ORM.OrmTypeConverter以外的类型转换支持)
-->
<Converter name="sbyte_" type="vJine.Core.ORM.TypeConverter+sbyte_, vJine.Core"/>
</Converters>
<TypeMaps adapter="SQLite">
<!--全局数据类型映射-->
<TypeMap adapter="MSSQL" type="string" SQL_TYPE="varchar(70)" Conv="_对应Converter.name(此处不需要,留空即可)"></TypeMap>
<!--请依据需求指定,系统默认类型映射参见《vJine.Core ORM 数据类型映射》-->
</TypeMaps>
<SchemaMaps Active="true"><!--如果Active="false",则或略此项定义-->
<!--针对表的数据类型映射-->
<Schema Active="true" adapter="SQLite" type="vJineCore_QuickStart.BML.My_Model, vJineCore_QuickStart"><!--如果Active="false",则或略此项定义-->
<Map Active="true" Name="Comments" Alias="Comments" IsNullable="true" TrimString="true" Conv="_对应Converter.name(此处不需要,留空即可)"/><!--如果Active="false",则或略此项定义-->
</Schema>
</SchemaMaps>
</OrmConfig>
</vJine.Net>
</configuration>
2、增删改查:

  除《轮子来袭 vJine.Core Orm 之 01_快速入门》一文中所述的基本增、删、改、查外,您也可以使用如下方式操作:

  

Class<My_Model>.I insert = new Class<My_Model>.I();
insert
.Into("table_A", "table_B") //不写则默认为类名(My_Model)
.Keys(My_Model._.ID, My_Model._.MyStatus, My_Model._.Qty) //不写则默认为所有公共属性
.Values(new_data); dm.E<My_Model>(insert);
Class<My_Model>.D delete = new Class<My_Model>.D();
delete
  .From("table_A", "table_B")
  .Where(My_Model._.ID.Like("A%") & (My_Model._.MyStatus == My_Model.Status.Ready | My_Model._.MyStatus == My_Model.Status.Running)); dm.E<My_Model>(delete);
Class<My_Model>.U update = new Class<My_Model>.U();

update
.Update("table_A", "table_B")
.Set(My_Model._.Qty.EQ(My_Model._.Qty + ))
.Where(My_Model._.ID.Like("A%") & (My_Model._.MyStatus == My_Model.Status.Ready | My_Model._.MyStatus == My_Model.Status.Running)); dm.E<My_Model>(update);
Class<My_Model>.Q querier = new Class<My_Model>.Q();

querier
.Select(My_Model._.ID, My_Model._.MyStatus, My_Model._.Qty) //只需选择必要的字段即可
.From("table_A", "table_B", "table_C")
.Where(My_Model._.ID.Like("A%") & (My_Model._.MyStatus == My_Model.Status.Ready | My_Model._.MyStatus == My_Model.Status.Running));

dm.E<My_Model>(querier, container);

3、连接、事务及级联调用:

void transaction(DataManager dm) {
/*
* 此处将DataManager作为传入参数有其特殊的意义
* 在常规的业务逻辑中,经常会碰到多个数据库操作方法之间的调用,
* vJjine.Core ORM考虑的了这种应用,确保了多个方法调用时能共享同一个链接、同一个事物
* 而同时又降低了代码的复杂度
*/
dm.Open(); //打开连接
try {
dm.Begin(); //开始事物
//transaction 的一系列数据库操作
transaction_b(dm); //此处调用transaction_b
dm.Commit(); //此处提交事物
} catch (Exception ex) {
dm.Rollback();
//处理错误
} finally {
dm.Close(); //此处关闭连接
}
} void transaction_b(DataManager dm) {
dm.Open(); //此处共用transaction方法打开的连接
try {
dm.Begin(); //此处共用transaction方法开启的事物
//transaction_b 的一系列数据库操作
dm.Commit(); //此处并未提交事物
} catch (Exception ex) {
dm.Rollback();
//处理错误
} finally {
dm.Close(); //此处并未关闭连接
}
}

4、关于辅助类:

public partial class _ /*起这个名字是为了方便操作,框架中并没有对此做限制,之所以起这个名字也是借鉴了其他的ORM框架*/
/*不必一定声明在业务模型类内部,可依据团队习惯单独定义,同时也不必每个属性都定义,之定义必要的属性即可(参见Class<>.IDUQ)*/ {
public static readonly Property<My_Model/*包含属性的类*/, string/*需与属性类型完全一致*/> ID = new Property<My_Model/*包含属性的类*/, string>("ID"/*需与属性名完全一致*/);
}

5、关于充血与贫血:

vJine.Core ORM 采用贫血模型,最大程度的保证了框架的非侵入特性,当然您也可以依据你的意愿进行封装。

至此,您已经对vJine.Core ORM框架有了充分的了解,如果有闲暇时间,可以试试亲手操作一下了。

QQ讨论群:115051701,欢迎加入。

轮子来袭 vJine.Core Orm 之 04_使用进阶的更多相关文章

  1. 轮子来袭 vJine.Core Orm 之 03_架构分析

    1.vJine.Core ORM 架构: 如上图所示,vJine.Core ORM的特点如下: 所有操作均以DataManager为核心: DataManager业务部分的增删改查操作依赖于Class ...

  2. 轮子来袭 vJine.Core Orm 之 02_代码生成

    1.下载并安装动软代码生成器: 2.下载vJine.Core.Orm模板: 3.解压模本文件并复制到如下的动软代码生成器模板目录: 4.打开动软代码生成器会看到模板已识别加载: 5.选择模板代码批量生 ...

  3. 轮子来袭 vJine.Core Orm 之 01_快速体验

    vJine.Core 是.Net环境下C#类库,在其包含的众多功能中ORM功能尤为突出,现简介如下. 一.支持的数据库: SQLite, MySQL, MS SQL, Oracle. 二.使用方法: ...

  4. 轮子来袭 vJine.Core 之 AppConfig<T>

    1.引用vJine.Core; 2.定义配置类; using System; using System.Collections.Generic; using System.Text; using Sy ...

  5. vJine.Core 0.3.0.49 正式发布

    nuget: https://www.nuget.org/packages/vJine.Core/ oschina: http://git.oschina.net/vjine/vJine.Core/a ...

  6. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  7. [最新].NET Core ORM 开源项目一览,持续更新

    截至2019-05-08共收集27个 .NET Core ORM 开源项目,38个 .NET ORM 开源项目. .NET Core ORM 开源项目收集地址:https://github.com/o ...

  8. .NET Core 学习资料精选:进阶

    .NET 3.0 这个月就要正式发布了,对于前一篇博文<.NET Core 学习资料精选:入门>大家学的可还开心?这是本系列的第二篇文章:进阶篇,喜欢的园友速度学起来啊. 对于还在使用传统 ...

  9. .Net Core ORM选择之路,哪个才适合你

    因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别的慢,导致系统体验比较差好多都改写Sql实现. 所以我 ...

随机推荐

  1. Qt 固定窗口【worldsing 笔记】

    w.setWindowFlags(Qt::WindowMinimizeButtonHint); //禁止最大化按钮 w.setFixedSize(1024,587);//固定窗口大小

  2. BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇

    BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 2014/08/03 · Web前端, 开发 · CSS, HTML, 技术面试 分享到: 188 MongoDB集群之分片技术应用 ...

  3. Countly在andoid和vps集成使用,开源的统计分析sdk

    这几天项目需要,简单研究了一下countly,说实话完全满足项目需要,比umeng这类产品干净多了. Countly Mobile Analytics 下面就讲一下android 集成的过程,以及 服 ...

  4. (莱昂氏unix源代码分析导读-50)LP11行式打印机

    by cszhao1980 LP11有两个设备寄存器:状态寄存器(lpsr)和数据缓冲寄存器(lpbuf),可通过以下结构进行访问: 8812: #define LPADDR 0177514 8823 ...

  5. win32进阶必备:多线程同步之互斥锁

    应用多线程互斥锁之前首先简单过一下C程序可能用到的3个创建线程函数: CreateThread,windows系统提供的唯一创建线程API,_beginthread和_beginthreadex都在内 ...

  6. Codeforces Round #200 (Div. 1) B. Alternating Current 栈

    B. Alternating Current Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/343 ...

  7. Android的横竖屏切换

    android的横竖屏切换,也会发生不少问题. 1. 锁定屏幕方向,禁止切换: 在AndroidManifest.xml中的Activity参数中加上   android:screenOrientat ...

  8. Hive权限介绍

    一.开启权限 眼下hive支持简单的权限管理,默认情况下是不开启.这样全部的用户都具有同样的权限.同一时候也是超级管理员.也就对hive中的全部表都有查看和修改的权利,这样是不符合一般数据仓库的安全原 ...

  9. Socket异步通信学习二

    接下来是服务器部分,采用异步模式,新建了一个AsynServer类,用于存放socket服务器代码,主要有4个方法: 有一个全局socket,下面四个方法中都用到. Socket socket = n ...

  10. Hibernate - 使用注解完成映射

    除了使用XML配置来映射对象和数据库表,还可以使用注解来完成持久化.使用注解需要导入Hibernate Annotations扩展包 @Entity -加在类的前面,将类声明为持久化类. -javax ...