DataVeryLite入门教程(一) 配置篇
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); } }