.Net开源微型ORM框架专业测评

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、Entity Framework(重量级)
2、NHibernate(重量级)
3、Dapper(轻量级)
4、PetaPoco(轻量级)
5、 (介于EF和Dapper之间)

对比:操作的难易程度、执行效率、跨数据库

应用程序的组成必须有数据库
开发人员的职责:编写业务和功能性代码
如果让开发人员去学习数据库增加了开发成本,将数据库操作封装为代码级别的API让程序员调用,实现了职责分离

(1)Entity Framework
NuGet 安装EF
命令行输入:Install-Package EntityFramework -Version 版本号 (不知道安装什么组件时可以按Tab键自动补齐)

Model First 生成一个edmx文件,存储xml格式数据,保存表和对象的映射,因此运行速度快一些
Code First 不需要edmx文件,映射xml临时加载到内存当中,因为要生成映射所以耗费一些额外的时间

安装MySql驱动
Install-Package MySql.Data.Entity

EF第一次运行要加载edmx数据库映射,因此会比较慢。所以我们可以对EF进行预热,在用户第一次查询之前(应用程序启动时)让EF进行暖机操作

// EF暖机操作,将映射加载到内存中
using (var db = new MyAppDBContext())
{
var objectContext = ((IObjectContextAdapter)db).ObjectContext;
var mappingCollection = (System.Data.Entity.Core.Mapping.StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace);
mappingCollection.GenerateViews(new System.Collections.Generic.List());
}

(2)Dapper
使用扩展方法对mon命名空间中DbConnection类实现的接口IDbConnection进行了扩展
Nuget搜索Dapper dot net并安装(引用仅有一个dll)

using(SqlConnection conn = new SqlConnection(connstr))
{
var list = conn.Query

("select * from article"); //Article实体
foreach(var item in list)
{
console.WriteLine(item.Title);
}
}

//Dapper多表查询
using(SqlConnection conn = new SqlConnection(connstr))
{
var list = conn.Query("select t2.Title from TbHead t1,TbItem t2 where t1.id = t2.id");
foreach(var item in list)
{
console.WriteLine(item.Title); //运行时动态推断类型
}
}

//Dapper同时查询多个表
using(SqlConnection conn = new SqlConnection(connstr))
{
using(var reader = conn.QueryMultiple("select * from TbHead;select * from TbItem"))
{
var list = reader.Read();
foreach(var item in list)
{
console.WriteLine(item.Title);
}
}
}

//Dapper插入数据
using(SqlConnection conn = new SqlConnection(connstr))
{
var count= conn.Execute("insert into Article(title,content) values('@title','@content');",new {title="测试标题",content="测试内容"});
foreach(var item in list)
{
console.WriteLine(i

tem.Title); //运行时动态推断类型
}
}

Dapper连接MySql
使用NuGet下载MySql数据库驱动,修改连接字符串,将SqlConnection等类名改为MySqlConnection即可。

//跨数据库操作,代码通用,不需要修改任何代码(不同数据库sql语法不同要修改)
//通过连接字符串的Provider来创建不同数据库的连接对象
var connStr = ConfigurationManager.ConnectionString["conn"];
using(IDbConnection conn = DbProviderFactories.GetFactory(connStr.ProviderName).CreateConnection())
{
conn.ConnectionString = connStr.ConnectionString;
var list = conn.Query

("select * from article"); //Article实体
foreach(var item in list)
{
console.WriteLine(item.Title);
}
}

3、PetaPoco(增删改不需要自己写sql语句)
Nuget下载PetaPoco,安装时会自动生成模板
其中在DataBase.tt模板文件中修改配置ConnectionStringName为连接字符串的name,其他配置修改可选

using(var context = new DbContext())
{
var list = context.Query
("select * from article");
foreach(var item in list)
{
console.WriteLine(item.Title);
}
}

//PetaPoco插入
var article = new Article{ Title="测试标题",Content="测试内容" };
var count = article.Insert();

相关文档
最新文档