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