社区
C#
帖子详情
linq to entity 第一次查询数据慢
小D2013
2010-12-11 01:04:24
如题求解,
测试就是在一个按钮点击事件中随便写一些linq,最后弹出一个box,第一次很慢,要好几秒中才能弹出box,跟着在点击,很快就能弹出box,基本没有延时,这种情况怎么处理?
...全文
110
4
打赏
收藏
linq to entity 第一次查询数据慢
如题求解, 测试就是在一个按钮点击事件中随便写一些linq,最后弹出一个box,第一次很慢,要好几秒中才能弹出box,跟着在点击,很快就能弹出box,基本没有延时,这种情况怎么处理?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
小D2013
2011-01-22
打赏
举报
回复
这个帖子继续提前
小D2013
2011-01-13
打赏
举报
回复
[align=center]管理员为什么删除我给自己的回复
请给个理由先?[/
align]
轻量级
数据
持久层组件Restful.Data.zip
Restful.Data是一套通用的轻量级
数据
持久层组件,除封装了ADO.NET基本的
数据
库操作以外,也提供了一些orm相关的API,用户可以方便的定义实体类,并使用这些API对
数据
进行增删改查等操作。 Restful.Data借鉴了业界如nhibernate、
entity
framework等知名的
数据
持久层组件,但从一开始设计的初衷就是为了让用户能快速的学习和使用,并写出更加简洁优雅的代码,所以摒弃了一些复杂的设计和功能,用户可以使用变通的方式或方法使用Restful.Data组件实现其目的。 Restful.Data充分考虑了实体框架的执行效率问题,进行了反复的推敲和论证,尽可能的采用高效的设计方案来提高性能。谁需要Restful.Data? 敢于冒险、追求完美、勇于挑战并极具责任感的程序设计人员。Restful.Data提供哪些功能?基本的ADO.NET操作: BeginTransaction ExecuteScalar ExecuteDataReader ExecuteDataTable ExecuteDataSet ExecutePageQuery ExecuteStoredProcedureORM相关操作: Insert Updete Delete Find如何使用Restful.Data? 使用前的准备: 下载Restful.dll、Restful.Data、Restful.Data.MySql、Remotion.
Linq
.dll、MySql.Data.dll,或者直接下载源代码进行编译并获取这5个dll,并在项目中引用这些dll。在 Web.config 或 App.config 中配置连接字符串,如下:注册提供程序工厂: SessionFactories.Register(); 提供程序工厂在一个Application中仅需注册一次。如何进行基本的
数据
库操作:using( ISession session = SessionFactory.CreateDefaultSession() ){ string sql = "select * from Person"; DataTable dt = session.ExecuteDataTable( sql ); }CreateDefaultSession默认情况下根据配置文件中连接字符串节点的第一项创建
数据
库连接,你可以调用CreateSession进行指定,或者你也可以使用 SessionFactory.Default = "MySql2"指定默认连接。未防止 SQL 注入,你也使用呆参数方法:using( ISession session = SessionFactory.CreateDefaultSession() ) { string sql = "select * from Person where Id = @Id;"; IDictionary
parameters = new Dictionary
(); parameters.Add( "@Id", 5 ); DataTable dt = session.ExecuteDataTable( sql, parameters ); }与此类似的还有ExecuteScalar、ExecuteDataReader、ExecuteDataTable、ExecuteDataSet等方法。如何进行分页
查询
:using( ISession session = SessionFactory.CreateDefaultSession() ) { string sql = "select * from User where CreateTime < @CreateTime"; IDictionary
parameters = new Dictionary
(); parameters.Add( "@CreateTime", DateTime.Now ); //
查询
第2页,每页10条,并根据 CreateTime 字段降序排列 PageQueryResult result = session.ExecutePageQuery( sql01, 2, 10, "CreateTime DESC", parameters ); }如何进行
数据
新增:using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person(); // person.Id = 1; 若Id字段为自增类型,无需指定。 person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; int i = session.Insert( person ); }如何进行
数据
更新:using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person(); person.Id = 1; person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; // 在调用此方法时,务必指定实例的主键值。 int i = session.Update( person ); }或者你也可以批量更新:using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person(); // person.Id = 1; person.Name = "test01"; person.CreateTime = DateTime.Now; person.IsActive = true; // 在调用此方法时,不需要指定主键值,且不会更新主键字段 session.Update
().Set( person ).Where( s => s.IsActive == false ).Execute(); }如何进行
数据
删除:using( ISession session = SessionFactory.CreateDefaultSession() ) { var person = new Person() { Id = 1 }; // 在调用此方法时,需要指定主键值 session.Delete( person ); }或者你也可以批量删除:using( ISession session = SessionFactory.CreateDefaultSession() ) { // 在调用此方法时,不需要指定主键值 session.Delete().Where( s => s.IsActive == false ).Execute(); }如何进行单表
查询
:using( ISession session = SessionFactory.CreateDefaultSession() ) { var queryable = session.Find() .Where( s => s.Name.Contains("a") ) .Where( s => s.CreateTime < DateTime.Now ) .OrderBy( s => s.CreateTime ) .Skip(5) .Take(10); var list = queryable.ToList(); var count = queryable.Count(); var first = queryable.FirstOrDefault(); var queryable1 = from s in session.Find
() where s => s.Name.Contains("a") orderby s.CreateTime descending select new { Id = s.Id, Name = s.Name }; // ... }目前只支持对单表的
LINQ
查询
,且为了降低复杂度,后期也并不打算支持多表
查询
,对函数的支持也有限,仅支持string类型的 StartsWith、EndsWith、Contains、Equals、IsNullOrEmpty等方法,对于其他方法后期将会继续完善。如果你需要实现一个复杂的
查询
并将其转换成对象,你也可以这样:using( ISession session = SessionFactory.CreateDefaultSession() ) { string sql = "..."; T @object = session.Find
( sql ); }如何支持事务处理:using( ISession session = SessionFactory.CreateDefaultSession() ) { using( DbTransaction transaction = session.BeginTransaction() ) { // ... // ... transaction.Commit(); } }SessionHelper的使用:SessionHelper对session对象的方法进行了静态封装,如果你只是需要执行单条语句,并马上关闭连接,你可以使用 SessionHelper 类中提供的一些辅助方法。5、如何定义实体类[Serializable] public class Person :
Entity
Object // 需继承与
Entity
Object 类 { private int m_Id; private string m_Name; private int? m_Age; private decimal? m_Money; private DateTime m_CreateTime; private bool m_IsActive; [PrimaryKey, AutoIncrease] // 如果是自增字段,标记为 AutoIncrease;如果是主键标记为 PrimaryKey public int Id { get { return this.m_Id; } set { this.m_Id = value; this.OnPropertyChanged( "Id", value ); } } public string Name { get { return this.m_Name; } set { this.m_Name = value; this.OnPropertyChanged( "Name", value ); } } public int? Age { get { return this.m_Age; } set { this.m_Age = value; this.OnPropertyChanged( "Age", value ); } } public decimal? Money { get { return this.m_Money; } set { this.m_Money = value; this.OnPropertyChanged( "Money", value ); } } public DateTime CreateTime { get { return this.m_CreateTime; } set { this.m_CreateTime = value; this.OnPropertyChanged( "CreateTime", value ); } } public bool IsActive { get { return this.m_IsActive; } set { this.m_IsActive = value; this.OnPropertyChanged( "IsActive", value ); } } }6、总结因作者时间关系,组件目前并非十分完善,测试工作也只简单的进行了一部分,但您可以完全放心的应用于商业项目中,如遇到问题,作者将尽可能的解决。 标签:Restful
Entity
Franmework
LINQ
TO
Entity
的性能问题和常见错误
最开始学习使用ASP.NET MVC,配套的访问持久
数据
是
LINQ
To SQL,简单好用,一般项目无需关注连接
数据
库对象,和性能问题,但随着发展,微软竟然解散
LINQ
to SQL团队,改为EF,为了兼容众多
数据
库,改为
LINQ
to Entities; 最近做几个项目,本来还是使用
LINQ
To SQL,但感觉官方基本不维护,激励推崇
LINQ
to Entities,觉得相差性不大,所以在新项目使用了
LINQ
to Entities,结果掉入深坑,本来2周能搞定的项目,足足一个月才把
LINQ
to E
Entity
Framework 和
LINQ
To SQL的区别
综述
LINQ
是一种语言集成
查询
,它包含了
LINQ
to SQL,
LINQ
to Objects,
LINQ
to XML,
LINQ
to Entities(
Entity
Framework两种
查询
方式之一,另外一种叫做
Entity
SQL)。
Entity
Framework 是一种ORM (Object Relational Mapping)框架,把关系型
数据
转换成对象的一种框架。
LINQ
to SQL是
Linq
最初提供的一种访问
数据
的方式,它允许你从SQL Server
数据
库获取
数据
。
LINQ
to
LINQ
to
Entity
(摘录)
LINQ
to Entities 是
LINQ
中最吸引人的部分。它让你可以使用标准的 C# 对象与
数据
库的结构和
数据
打交道。使用
LINQ
to Entities 时,
LINQ
查询
在后台转换为 SQL
查询
并在需要
数据
的时候执行,即开始枚举结果的时候执行。
LINQ
to Entities 还为你获取的所有
数据
提供变化追踪,也就是说,可以修改
查询
获得的对象,然后整批同时把更新提交到数...
Linq
使用
entity
framework
查询
视图返回重复记录的问题(转)
最近用
Entity
Framework开发项目过程中,发现
linq
查询
返回的结果,与SQL语句
查询
出的正确结果不一致。
LINQ
查询
出来的结果是一些重复记录。 这种问题一般是对
数据
库视图进行
查询
时发生,问题产生的原因及现象如下: 1)使用.net 的
linq
to sql,或
linq
to entities 生成的实体对象,出于为提高效率等原因,会对每个对象自动判断出一些列做为实体对象的Key(
Entity
Key), 这个Key就是相当于我们表中的主键,
查询
结果时,会根据这个Key列的值进行判断,假设
数据
库中
C#
110,545
社区成员
642,580
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章