DataVeryLite入门教程(一) 配置篇

DataVeryLiteDataVeryLite 是基于.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).
 
DataBaseConnection String sampleproviderName
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);
   }
}

 

posted @ 2014-04-27 20:06  怡盛  阅读(1168)  评论(2编辑  收藏  举报