ASP.NET实体框架 - 如何在每个请求使用单个上下文时使用编译查询?

时间:2013-07-15 03:59:29

标签: asp.net entity-framework objectcontext

以下是我的一个存储库类。我每个请求使用单个上下文。因此,对于每次后续调用GetSpecificationList()都会创建一个新的对象上下文&当它超出范围时处理它。现在我对以下几点感到困惑 -

1。对于每次后续调用GetSpecificationList(),它将创建一个新的上下文。所以我应该在GetSpecificationList()方法中使用NoTracking选项。它会带来任何好处吗?

2。假设我们需要经常调用GetSpecificationList()。我应该使用GetSpecificationList()的编译查询。因为我们在EF将存储编译查询信息的每个请求上处理上下文。

第3。在InsertUpdateProjectSpecification()方法中,修改我们在调用后执行的实体,以通知EF我们要修改哪个实体。有没有这种开销的替代方案?

objProjectSpecification = context.ProjectSpecifications.Where(p =>                 p.ProjectSpecificationId == spec.ProjectSpecificationId).FirstOrDefault();

public static List<ProjectSpecification>  GetSpecificationList(int projectId)
{
    using (PropDBAdminEntities context = new PropDBAdminEntities())
        {
         return context.ProjectSpecifications.Where(p=>  
                           p.ProjectId==projectId).ToList();
         }
}

public static void InsertUpdateProjectSpecification(List<ProjectSpecification>     
                 projectSpecificationList)
{

     using (PropDBAdminEntities context = new PropDBAdminEntities())
     {
           ProjectSpecification objProjectSpecification=null;
           projectSpecificationList.ForEach(spec =>
           {
               if (spec.ProjectSpecificationId == 0)
                  {
                      spec.CreatedBy = 1;
                      spec.CreatedDate=DateTime.Now;
                       context.ProjectSpecifications.AddObject(spec);
                  }
                  else
                  {
                    spec.ModifiedBy = 1;
                    spec.ModifiedDate = DateTime.Now;
        objProjectSpecification= context.ProjectSpecifications.Where(p => 
            p.ProjectSpecificationId == spec.ProjectSpecificationId).FirstOrDefault();
                     spec.CreatedBy = objProjectSpecification.CreatedBy;
                    spec.CreatedDate = objProjectSpecification.CreatedDate;
                    context.ProjectSpecifications.ApplyCurrentValues(spec);
                   }
                 });
                    context.SaveChanges();
            }

   }

请建议。

谢谢,

@保罗

0 个答案:

没有答案