0

以下是我的存储库类之一。我每个请求都使用单个上下文。因此,对于每次对 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();
            }

   }

请建议。

谢谢,

@保罗

4

0 回答 0