DataVeryLite 是基于.net 4.0的数据库持久化ORM框架.

目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access.
 
DataVeryLite 的配置系统非常简单,稍微有点c#基础的程序猿,半小时都能上手;
不仅学习简单,编码量也非常少;熟练之后基本可以复制粘贴来完成配置。

1.连接字符串配置

a,App.config/Web.config配置方式

    在<connectionStrings>节点中添加配置,示列如下:
 <add name="myConnetion" connectionString="Data Source=host;Initial Catalog=db;Integrated Security=True" providerName="sqlserver"/>

需要说明的是 name connectionString和providerName三个属性缺一不可

providerName必须是DataVeryLite提供的7个枚举值(下表中的providerName).
 
DataBase Connection String sample providerName
Sqlite Data Source=path;Version=3; sqlite
Access Provider=Microsoft.Jet.OLEDB.4.0;Data Source=path access
MySql server = host; user id = name; password = pwd; database = db; mysql
PostgreSql Server= host;User Id=name;Password=pwd;Database=db; postgresql
SqlServer Data Source=host;Initial Catalog=db;Integrated Security=True sqlserver
Db2 Database=db;User ID=name;Server=host;password=pwd db2
Oracle Data Source=XE;User Id=name;Password=pwd; oracle
 
 
 
 
 
 
 
 
 
 
 
     b,ConnectionStringSettingsProvider方式
     可以在代码中继承ConnectionStringSettingsProvider,然后实现其方法。通过这种方式可以兼容任何其他获取连接字符串的方式,
你可以在实现的方法中添加任何获取连接字符串的逻辑,不过前提是key值不能重复。
代码例子如下:
public class MyConnectionStringProvider : ConnectionStringSettingsProvider
{
public override List<ConnectionStringSettings> ToConnectionString()
{
var sqlServverConnStr = new ConnectionStringSettings
{
Name = "sqlserver1",
ConnectionString = "Data Source=host;Initial Catalog=db;Integrated Security=True",
ProviderName = "sqlserver"
};
var mysqlConnStr = new ConnectionStringSettings
{
Name = "mysql1",
ConnectionString = "server = host; user id = name; password = pwd; database = db;",
ProviderName = "sqlserver"
};
return new List<ConnectionStringSettings>() { sqlServverConnStr,mysqlConnStr };
}
}

2,数据库映射

    假设我们有一个数据库Dandelion
    那么我们一般可以做如下配置
 
     [DataBase(Key = "sqlserver1")]
public class Dandelion : DataVeryLite.Core.EntityPool
{ }

DataBaseAttribute中的Key属性对应的连接字符串配置中的key值,这样Dandelion会自动加载数据库上下文信息。

DataVeryLite.Core.EntityPool中会有很多实用的操作数据库的方法,比如高性能的批量操作.
DataVeryLite.Core.EntityPool更多详细内容会在后面文章中介绍.
3,表映射
 假设我们有一个数据表Person
 那么我们一般可以做如下配置

    [Table(Name = "Person" , EntityPool = typeof(Dandelion))]
public partial class Person : DataVeryLite.Core.Entity
{
[Column(Name = "Id", IsPrimaryKey = true)]
public int Id { get; set; } [Column(Name = "Name")]
public string Name{ get; set; } [Column(Name = "Sex")]
public string Sex { get; set; } [Column(Name = "Phone")]
public string Phone { get; set; } [Column(Name = "Email")]
public string Email { get; set; }
}

TableAttribute中的Name为表的名字。可以不设置,这时Person的类名就对应表的名字,如果我们需要类名和表名不一致,这时可以设置Name。

TableAttribute中的EntityPool 为指向数据库。主要目的是区分其他数据库。可以不设置,而设置TableAttribute中的Key。EntityPool和Key的作用都是自动加载数据库和表上下文信息。
ColumnAttribute中的Name为表中字段的名字。可以不设置,这时属性名就对应字段名,如果我们需要属性名和字段名不一致,这时可以设置Name。
ColumnAttribute中的IsPrimaryKey指示该字段是否是主键。
4,key值管理
在.net中key值是一个字典的唯一键值,不能重复,否则会报异常:System.ArgumentException : 已添加了具有相同键的项。
设置key非常重要,也是DataVeryLite配置中最为核心的步骤。可以通过以下三种方式设置key:
     a,继承EntityPool和Entity的实体类,可以设置key属性。
     b,在DataBaseAttribute和TableAttribute中可以设置key。
     c,Configure.SetKey委托,设置全局key
他们的优先级分别是a>b>c
 
下面是全局key的列子,你可以根据自己的需要设置逻辑。

Configure.SetKey = (sender) => "sqlserver1";

或

Configure.SetKey = (sender) =>
{
if (sender is Dandelion)
{
return "sqlserver1";
}
else
{
return "mysql1";
}
};

项目地址 http://dataverylite.codeplex.com/

NuGet

PM> Install-Package DataVeryLite

  

Example lite

using System;
public class HelloWorld
{
public static void Main(params string[] args)
{
var p=Models.Xe.Person();
p.Load(By.Id(1));
p.Del();
Console.WriteLine(p.Name+","+p.Age);
}
}

DataVeryLite入门教程(一) 配置篇的更多相关文章

  1. DataVeryLite入门教程(二) Entity篇

    DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. ...

  2. Systemd 入门教程:实战篇

    Systemd 入门教程:实战篇 上一篇文章,介绍了 Systemd 的主要命令,这篇文章主要介绍如何使用 Systemd 来管理我们的服务,以及各项的含义: 一.开机启动 对于那些支持 System ...

  3. Spring Cloud 入门教程 - 搭建配置中心服务

    简介 Spring Cloud 提供了一个部署微服务的平台,包括了微服务中常见的组件:配置中心服务, API网关,断路器,服务注册与发现,分布式追溯,OAuth2,消费者驱动合约等.我们不必先知道每个 ...

  4. 【转帖】Systemd 入门教程:命令篇

    Systemd 入门教程:命令篇  Copy From http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html 感觉 ...

  5. Linux Capabilities 入门教程:概念篇

    原文链接:Linux Capabilities 入门教程:概念篇 Linux 是一种安全的操作系统,它把所有的系统权限都赋予了一个单一的 root 用户,只给普通用户保留有限的权限.root 用户拥有 ...

  6. Linux 命令详解(八)Systemd 入门教程:实战篇

    Systemd 入门教程:实战篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

  7. Linux 命令详解(七)Systemd 入门教程:命令篇

    Systemd 入门教程:命令篇http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

  8. (转)Systemd 入门教程:命令篇

    Systemd 入门教程:命令篇 原文:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html Systemd 入门 ...

  9. SSH(Struts2+Spring4+Hibernate4)框架教程之配置篇

    SSH(Struts2+Spring4+Hibernate4)框架教程之配置篇 - 若明天不见 - 博客频道 - CSDN.NEThttp://blog.csdn.net/why_still_conf ...

随机推荐

  1. 【50.49%】【codeforces 731B】Coupons and Discounts

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. React Native中的DeviceEventEmitter.addListener与DeviceEventEmitter.emit

    官方文档没有对这两个方法做很好的解释,需要自己找资料研究.看了几篇文章,总结是和订阅发布模式差不多,用来事件监听发送的. React Native学习之DeviceEventEmitter传值   R ...

  3. BS_OWNERDRAW风格的作用和例子(值得研究,待续)

    TBitBtn就是一个例子: procedure TBitBtn.CreateParams(var Params: TCreateParams); begin inherited CreatePara ...

  4. jQuery迭代器

    http://www.imooc.com/code/3417 迭代器 迭代器是一个框架的重要设计.我们经常需要提供一种方法顺序用来处理聚合对象中各个元素,而又不暴露该对象的内部,这也是设计模式中的迭代 ...

  5. 一句话的设计模式(JAVA版)

    ·结构型模式: o适配器:用来把一个接口转化成另一个接口,如 java.util.Arrays#asList(). o桥接模式:这个模式将抽象和抽象操作的实现进行了解耦,这样使得抽象和实现可以独立地变 ...

  6. 《菊与刀》original 的阅读

    0. 词汇 foe:敌人,反对者,危害物: rigid:严格的,僵硬的,死板的, they are incomparably rigid in their behavior, innovation:革 ...

  7. SEO分享:为什么我的资源外链这么多的高品质?

    在小浪前制成的制品" [完整版]我怎么3的月800单词索引厨师主页!".之后,很多人都表示了极大的钦佩观看.顽强的运行力,真SEO它是运行顽强的力量.也有人说是吹牛吧,一天500外 ...

  8. Matlab随笔之插值与拟合(上)

    原文:Matlab随笔之插值与拟合(上) 1.拉格朗日插值 新建如下函数: function y=lagrange(x0,y0,x) %拉格朗日插值函数 %n 个节点数据以数组 x0, y0 输入(注 ...

  9. Effective C++:规定24:如果所有的单位都需要的参数类型转换,使用请做到这一点non-member功能

    (一个) 如果一个class.同意整数"隐式转换为"有理数似乎非常合理. class Rational{ public: Rational(int numerator = 0, i ...

  10. Feature extraction - sklearn文本特征提取

    http://blog.csdn.net/pipisorry/article/details/41957763 文本特征提取 词袋(Bag of Words)表征 文本分析是机器学习算法的主要应用领域 ...