如何在MVC中使用EDM?

时间:2015-02-14 11:02:45

标签: asp.net-mvc-3

我们如何在MVC 3中使用EDM?

LINQ to Entity是一个用于查询和管理数据库的出色ORM。它提供了很多东西,因此必须了解它的性能。这些都是正确的,因为LINQ有自己的惩罚。

在使用实体框架ORM设计和查询数据库时,是否应该记住哪些提示?

1 个答案:

答案 0 :(得分:0)

您可以参考this to Create and Know more about EDMCreating Model first EDM

以下方式可以提高EDM效果......

以下是一些提示。

<强> 1。避免将所有数据库对象放入一个单一实体模型

实体模型指定单个工作单元,而不是我们所有的数据库。如果我们有许多未相互连接的数据库对象,或者根本没有使用这些(日志表,批处理使用的对象等)。因此,这些对象消耗存储器中的空间并导致性能降低。因此,尝试制作相关数据库对象的单独实体模型。

<强> 2。如果不需要,请禁用实体的更改跟踪

每当您检索数据仅用于读取目的而不是修改时,则不需要对象跟踪。因此,使用MergeOption禁用对象跟踪,如下所示:

    NorthwindDataContext context = new NorthwindDataContext();       
    context.tblCities.MergeOption = MergeOption.NoTracking; 

此选项允许我们关闭对象缓存和对象的不必要的身份管理。

第3。使用预生成视图减少第一次请求的响应时间

当在应用程序中第一次创建ObjectContext的对象时,实体框架会创建一组访问数据库所需的类。这组类称为视图,如果您的数据模型很大,则创建视图可能会将Web应用程序响应延迟到第一个页面请求。我们可以通过使用T4模板或EdmGen.exe命令行工具在编译时创建视图来缩短响应时间。

<强> 4。如果不需要,请避免提取所有字段     避免从数据库中提取不必要的字段。假设我有20个字段的Customer表,我只对三个字段感兴趣 - CustomerID,Name,Address然后只获取这三个字段而不是获取Customer表的所有字段。

    //Bad Practice
    var customer =
    (from cust in dataContext.Customers
    select cust).ToList();
    //Good Practice
    var customer =
    (from cust in dataContext.Customers
    select new {
    customer. CustomerID,
    customer.Name,
    customer.Address
    }). ToList (); 

<强> 5。选择适当的数据操作集合

在linq中,我们有用于数据操作的Var,IEnumerable,IQueryable,IList类型集合。每个集合都有其对查询的重要性和性能影响,因此请注意使用所有这些集合进行数据操作。要了解所有这些集合之间的差异,请参阅文章IEnumerable VS IQueryableIEnumerable VS IListVar VS IEnumerable

<强> 6。在任何需要的地方使用编译查询

如果经常用于从数据库中获取记录,则对已编译的查询进行查询。此查询在第一次运行缓慢但在此之后它显着提高了性能。我们使用CompiledQuery类的Compile方法进行编译查询。

假设您需要根据城市一次又一次地检索客户详细信息,然后将此查询作为编译查询,如

    // create the entity object
    NorthwindEntities mobjentity = new NorthwindEntities();
    //Simple Query
    IQueryable lstCus = from customer in mobjentity.tblCustomers
    where customer.City == "Delhi"
    select customer;
    //Compiled Query
    Func> compiledQuery
    = CompiledQuery.Compile>(
    (ctx, city) =>from customer in ctx.Customers
    where customer.City == city
    select customer); 

在上面的查询中,我们传递字符串参数city来过滤记录。有关匿名方法的更多信息。

<强> 7。仅检索所需的记录数

当我们将数据绑定到网格或进行分页时,只检索所需的no记录以提高性能。这可以通过使用Take,While和Skip方法来实现。

    // create the entity object
    NorthwindEntities mobjentity = new NorthwindEntities();
    int pageSize=10,startingPageIndex=2;
    List lstCus = mobjentity.tblCustomers.Take(pageSize)
    .Skip(startingPageIndex * pageSize)
    .ToList(); 

<强> 8。避免使用包含

在LINQ中,我们使用contains方法来检查存在。它在SQL中转换为“WHERE IN”,导致性能下降。

<强> 9。避免使用视图

视图降低了LINQ查询性能的代价。这些性能很慢并且会大大影响性能。因此,请避免在LINQ to Entities中使用视图。

<强> 10。调试和优化LINQ查询

如果您想调试和优化查询,那么LINQ Pad就是一个很好的工具。我是LINQ Pad的忠实粉丝。它对查询构造,调试和优化非常有用。

    IQueryable lstCus = from customer in mobjentity.tblCustomers
    where customer.City == "Delhi"
    select customer;
    lstCus.Dump(); 

LINQ Pad的转储方法在结果窗口中给出上述查询的结果。

reference