-
在“ 解决方案资源管理器中,双击xxx.edmx文件。
-
在模型浏览器中,选择xxx模型 。
这可确保生成模型和映射文件的输出目录中。
-
重新生成解决方案。
经过上面的几步,就会成功xxx.csdl、xxx.msl、xxx.ssdl
-
在“ 解决方案资源管理器”中,选择您想要的项目的指定生成的事件。
-
在“ 项目 ”菜单上,单击“ 属性 ”。
-
选择“ 生成事件 ”选项卡。
-
在预生 成事件命令行窗口中,添加下面的预生成事件,没有换行符:
注意上面的命令没有换行
-
在“ 项目 ”菜单上,单击“ 添加现有项目”。
-
浏览到项目的输出目录,选择xxxcsdl,然后单击“确定”。
-
在“ 解决方案资源管理器”,选择“添加的文件。
-
在“ 属性”,将“ 生成操作”设置为“ 嵌入的资源”。
-
重复步骤1至3为的xxxssdl的文件,并xxx.msl的文件。
当我们只需要读取某些数据而不需要删除、更新的时候,可以指定使用MergeOption.NoTracking的方式来执行只读查询(EF默认的方式是AppendOnly)。当指定使用NoTracking来进行只读查询时,与实体相关的引用实体不会被返回,它们会被自动设置为null。因此,使用NoTracking可以提升查询的性能。
db.Customers.MergeOption = MergeOption.NoTracking; var cust = db.Customers.Where(c => c.City == "London");
使用GetObjectByKey方法获取数据时,它首先会查询是否有缓存,如果有缓存则从缓存中返回需要的实体。如果没有则查询数据库,返回需要的实体,并添加在缓存中以便下次使用。
EntityKey key1 = new EntityKey("NorthwindEntities1.Customers", "CustomerID", "♂风车车.Net"); Object cst1 = null; db.TryGetObjectByKey(key1, out cst1);
编译查询
提供对查询的编译和缓存以供重新使用。当相同的查询需要执行很多遍的时候,那么我们可以使用ComplieQuery将查询的语句进行编译以便下次使用,这样可以免去对同一语句的多次处理,从而改善性能。
public void ComplieTest() { using (var db = new NorthwindEntities1()) { //对查询进行编译 var customer = CompiledQuery.Compile<NorthwindEntities1, IQueryable<Customers>>((database) => database.Customers.Where(c => c.City == "London")); //执行20次相同的查询 for (int i = 0; i < 20; i++) { DateTime dt = System.DateTime.Now; foreach (var c in customer(db)) Console.WriteLine(c.CustomerID); Console.WriteLine(DateTime.Now.Subtract(dt).TotalMilliseconds); Console.WriteLine("---------------------------------------------------"); } } }
-