Entity Framework初识
来源:互联网 发布:安知非人之谮诉怎么读 编辑:程序博客网 时间:2024/05/18 03:59
一、创建EF:
1、添加新建项=>ADO.NET实体数据模型=>从数据库中生成,选择要连接的数据库;
2、删除‘.tt’为扩展名的文件(两个);
3、点击一下edmx页面的空白处,在属性中‘代码生成策略’设‘为默认值’。
4、生成,在Designer.cs中就有相应代码了。
二、使用EF实现增删查改:
1、linq表达式返回的都是IQueryable类型;
2、linq和lambda及增删改查的代码示例比较:
//创建EF上下文
UserInformationEntities uie = new UserInformationEntities();
//查询
linq:
IQueryable<MainInformation> temp = from u in uie.MainInformation
where u.autoId > 6
select u;
lambda:
//Where后面泛型约束了u;
IQueryable<MainInformation> temp = uie.MainInformation.Where<MainInformation>(u => u.autoId > 6);
//查询部分列(想想var是什么类型?)
linq:
var users = from u in uie.MainInformation
select new { u.userName, u.userPassword };
lambda:
var users = uie.MainInformation.Select(u => new { u.userName, u.userPassword });
//分页查询-->(重点)
lambda:
var userPage = uie.MainInformation
//.OrderBy<MainInformation, int>(u => u.autoId);//升序
.OrderByDescending(u => u.autoId)//降序(泛型约束可省略,下同)
.Skip(5)//越过5条
.Take(5)//取5条,即第二页。
.ToList();//避免延迟加载,使用内存型的集合;
//修改
var user = temp.FirstOrDefault();
if (user!=null)
{
Console.WriteLine(user.userName);
user.userName = "伟大的未来";
uie.SaveChanges();//把所有实体的变化保存回数据库;
}
//删除
if (user!=null)
{
uie.MainInformation.DeleteObject(user);
uie.SaveChanges();
}
//增加
MainInformation mif = new MainInformation();
mif.userName = "大神";
mif.userPassword = "123456";
uie.MainInformation.AddObject(mif);
uie.SaveChanges();
总结:1、linq和lambda在编译后的IL代码是一样的,因此效率也一样。
2、当使用该集合时才去数据库查询(延迟加载),延迟加载每次使用都会去查询数据库,降低性能;使用内存型的
集合(List、IEnumable)可以避免延迟加载。
三、EF的性能问题:
1、EF执行的步骤:1、增删改查操作=>上下文管理=>映射(实体->关系)=>底层ADO.NET。
2、本质是帮助生成sql脚本,在数据库层面上依然是执行sql脚本性能没有差别;在应用程序上根据实体的变化,EDMX里面
的ORM映射关系生成sql,此差别可以忽略;所以总体上性能没什么区别。
四、EF上下文管理:
当每次访问都new上下文时,数据库数据会丢失或变得不统一。
解决上下文乱的问题:
1、单例模式:会帮我们缓存实体,随着查询增多内存占用大。
2、使用线程内唯一:每次请求一个新的实例(asp.net,mvc,webform,推荐)。
3、只要用就新建一个实例(不推荐)。
第二种方法的代码实现:
新建一个类,代码如下:
class GetDbContext
{
/// <summary>
/// 使用线程内上下文唯一的方法
/// </summary>
/// <returns></returns>
public static UserInformationEntities GetCurrentDbContext()
{
UserInformationEntities uie = (UserInformationEntities)CallContext.GetData("DbContext");
if (uie == null)
{
uie = new UserInformationEntities();
CallContext.SetData("DbContext", uie);
}
return uie;
}
}
调用方法:
UserInformationEntities uie = GetDbContext.GetCurrentDbContext();
1、添加新建项=>ADO.NET实体数据模型=>从数据库中生成,选择要连接的数据库;
2、删除‘.tt’为扩展名的文件(两个);
3、点击一下edmx页面的空白处,在属性中‘代码生成策略’设‘为默认值’。
4、生成,在Designer.cs中就有相应代码了。
二、使用EF实现增删查改:
1、linq表达式返回的都是IQueryable类型;
2、linq和lambda及增删改查的代码示例比较:
//创建EF上下文
UserInformationEntities uie = new UserInformationEntities();
//查询
linq:
IQueryable<MainInformation> temp = from u in uie.MainInformation
where u.autoId > 6
select u;
lambda:
//Where后面泛型约束了u;
IQueryable<MainInformation> temp = uie.MainInformation.Where<MainInformation>(u => u.autoId > 6);
//查询部分列(想想var是什么类型?)
linq:
var users = from u in uie.MainInformation
select new { u.userName, u.userPassword };
lambda:
var users = uie.MainInformation.Select(u => new { u.userName, u.userPassword });
//分页查询-->(重点)
lambda:
var userPage = uie.MainInformation
//.OrderBy<MainInformation, int>(u => u.autoId);//升序
.OrderByDescending(u => u.autoId)//降序(泛型约束可省略,下同)
.Skip(5)//越过5条
.Take(5)//取5条,即第二页。
.ToList();//避免延迟加载,使用内存型的集合;
//修改
var user = temp.FirstOrDefault();
if (user!=null)
{
Console.WriteLine(user.userName);
user.userName = "伟大的未来";
uie.SaveChanges();//把所有实体的变化保存回数据库;
}
//删除
if (user!=null)
{
uie.MainInformation.DeleteObject(user);
uie.SaveChanges();
}
//增加
MainInformation mif = new MainInformation();
mif.userName = "大神";
mif.userPassword = "123456";
uie.MainInformation.AddObject(mif);
uie.SaveChanges();
总结:1、linq和lambda在编译后的IL代码是一样的,因此效率也一样。
2、当使用该集合时才去数据库查询(延迟加载),延迟加载每次使用都会去查询数据库,降低性能;使用内存型的
集合(List、IEnumable)可以避免延迟加载。
三、EF的性能问题:
1、EF执行的步骤:1、增删改查操作=>上下文管理=>映射(实体->关系)=>底层ADO.NET。
2、本质是帮助生成sql脚本,在数据库层面上依然是执行sql脚本性能没有差别;在应用程序上根据实体的变化,EDMX里面
的ORM映射关系生成sql,此差别可以忽略;所以总体上性能没什么区别。
四、EF上下文管理:
当每次访问都new上下文时,数据库数据会丢失或变得不统一。
解决上下文乱的问题:
1、单例模式:会帮我们缓存实体,随着查询增多内存占用大。
2、使用线程内唯一:每次请求一个新的实例(asp.net,mvc,webform,推荐)。
3、只要用就新建一个实例(不推荐)。
第二种方法的代码实现:
新建一个类,代码如下:
class GetDbContext
{
/// <summary>
/// 使用线程内上下文唯一的方法
/// </summary>
/// <returns></returns>
public static UserInformationEntities GetCurrentDbContext()
{
UserInformationEntities uie = (UserInformationEntities)CallContext.GetData("DbContext");
if (uie == null)
{
uie = new UserInformationEntities();
CallContext.SetData("DbContext", uie);
}
return uie;
}
}
调用方法:
UserInformationEntities uie = GetDbContext.GetCurrentDbContext();
- Entity Framework初识
- 【Entity Framework】EF初识
- Entity FrameWork
- Entity Framework
- Entity Framework
- Entity FrameWork
- Entity Framework
- Entity Framework
- Entity Framework
- Entity Framework
- entity framework
- Entity Framework
- entity framework
- Entity Framework
- Entity Framework 相关文章:
- Programming Entity Framework
- Entity Framework 性能比较
- ADO.NET Entity Framework
- 算法2013110501
- virtual judge配置和发布
- 递归调用
- Android动画效果translate、scale、alpha、rotate详解
- (利用树状数组统计子树权和8.3.1)POJ 3321 Apple Tree(利用树状数组动态统计子树权和)
- Entity Framework初识
- hadoop实现单表和多表关联
- 串口之计数器溢出率计算和串口的波特率之间的关系&& TMOD TCON SCON (转)
- 解决chrome 停止搜索的解决办法之-- Steganos Internet Anonym 导致
- iOS 或者 Mac OS X 使用 sem_init 总是返回 -1
- Android图形图画学习(10)——AlphaBitmap
- gauss模板计算
- 图像处理与计算机视觉:基础,经典以及最近发展
- 2013 苏州/上海科达通信集团 校招笔试题 总结