前段时间,我们对NLite.Data进行了开发,其NLite.Data Framework 是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型,对Linq的谓词提供了完美的支持,旨在让绝大部份的主流数据库都使用 Linq 来进行程序开发,让开发人员访问数据库从SQL中解放出来,易学易用上手快,配置简单,并且提供了源代码下载,方便定制。支持多数据库,目前支持Access、SQLServer、SqlCE、SQLite、MySQL、ORACLE,未来还会支持更多的数据库。现在进度将近尾声,下面我对此组件的使用方法和步骤做下说明:
1. 安装NLite Linq ORM Framework
在Package Manager Console控制台中输入下列命令:
PM> Install-Package NLite.Data
备注:Nuget安装方法和步骤: http://docs.nuget.org/docs/start-here/installing-nuget
Nuget使用说明: http://docs.nuget.org/docs/start-here/using-the-package-manager-console
2. 连接字符串配置
在配置文件中配置连接数据库字符串,以Sql Server Compact 为例
<configuration> <connectionStrings> <add providerName="System.Data.SqlServerCe.3.5" name ="Demo" connectionString="Data Source=DataBase\MyDatabase#1.sdf;Persist Security Info=True;pwd = 123"/> </connectionStrings> </configuration>
3. 数据库表设计
列名 数据类型 长度 允许空值 是否自增 主键
ID int 4 否 是 是
Name nvarchar 10 否 否 否
Gender real 4 是 否 否
Age int 4 是 否 否
4. 实体类的配置
首先引用NLite.Data.dll组件,然后添加属性(这里必须为属性,不可为字段),实体类中的属性要与数据库表中的列相对应。下面举例说明,我在数据库中建了一个名为User的表,包含ID、Name、Gender、Age列。那么,在实体类中的配置如下:
标准配置:
1 [Table(Name = "User")] 2 public class User 3 { 4 [Id(IsDbGenerated = true)] 5 public int ID { get; set; } 6 [Column(Name = "Name")] 7 public string Name { get; set; } 8 [Column(Name = "Gender")] 9 public bool Gender { get; set; } 10 [Column(Name = "Age")] 11 public int Age { get; set; } 12 }
缺省配置:
1 public class User 2 { 3 public int ID { get; set; } 4 public string Name { get; set; } 5 public bool Gender { get; set; } 6 public int Age { get; set; } 7 }
说明:如果其他属性名或类名与数据库表中的列名或表名一致,则实体类中相应的属性或类名上面可以不写标志,可以直接映射。不清楚可以参考:http://ndo.codeplex.com/ 下的“设计理念”
5. 写Sql语句之前的配置
写Sql语句之前还需要配置,以上面的User表为例:
1 connectionStringName = "Demo"; 2 cfg = DbConfiguration 3 .Configure(connectionStringName)//通过connectionStringName对象创建DbConfiguration对象(可以用于配置文件中有多个数据库连接字符串配置) 4 .AddClass<Model.User>()//注册实体到数据表的映射关系 5 ;
6. 增、删、改、查代码示例
1 Model.User user = new Model.User 2 { 3 Name = "新记录", 4 Age = 23, 5 Gender = true 6 }; 7 using (var ctx = cfg.CreateDbContext()) 8 ctx.Set<User>().Insert(user);
语句描述:实例化一个Use对象(ID为自增,可不写),是以对象的形式插入到数据库中,Insert方法返回一个整型值,成功为1,否则为0。
注:该语句生成的sql语句为:
1 INSERT INTO [User] ( [Name], [Gender],[Age] ) 2 VALUES (@p0, 1 , 23) 3 -- p0:(DbType = String,Value = 新记录)
1 using (var ctx = cfg.CreateDbContext()) 2 { 3 ctx.Set<User>().Delete(p=> p.ID == 5); 4 }
语句描述:该方法是通过唯一标识ID删除数据库中的一条记录,Delete方法返回一个整型值,成功为1,否则为0。
注:该语句生成的sql语句为:
1 DELETE FROM [User] 2 WhERE ( [ID] = 5 )
1 Model.User user = new Model.User 2 { 3 ID = 5, 4 Name = "修改新记录", 5 Age = 24, 6 Gender = false 7 }; 8 using (var ctx = cfg.CreateDbContext()) 9 ctx.Set<User>().Update(user);
语句描述:实例化一个Use对象(其中包含唯一的标识),是以对象的形式通过唯一标识找到该记录并更新数据库表中的记录,Update方法返回一个整型值,成功为1,否则为0。
注:该语句生成的sql语句为:
1 UPDATE [User] 2 SET [Name] = @p0, [Gender] = 0, [Age] = 24 3 WHERE ( [ID] = 5 ) 4 -- p0:( DbType = String,Value = 修改新记录 )
1 using (var ctx = cfg.CreateDbContext()) 2 ctx.Set<User>().ToArray(); 3 //查询所有的记录 4 5 using (var ctx = cfg.CreateDbContext()) 6 ctx.Set<User>().Find(5); 7 //查询ID为5的这条记录
语句描述:第一条语句是查询表中所有的记录,存储到User[]数组里面; 第二条语句查询ID为5的记录。
注:语句生成的sql语句分别为:
1 SELECT t0.[ID], t0.[Name], t0.[Gender], t0.[Age] 2 FROM [User] AS t0 3 --查询表中所有的记录 4 5 SELECT t0.[ID], t0.[Name], t0.[Gender], t0.[Age] 6 FROM [User] AS t0 7 WHERE ( t0.[ID] = 5 ) 8 --查询ID为5的这条记录