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