我的问题如下。 我有一个带有DalClass的DataAccessLayer项目。在这个Dal类中,我有许多使用Entity Framework进行操作的方法。例如,一些伪代码来说明我们是如何做到的。
class DalClass
{
public void SetEntityObject(EntityObject entityObject)
{
using (var context = new Entities())
{
context.EntityObjectSet.Attach(entityObject);
context.ChangeTracker.DetectChanges();
foreach (var entity in context.ChangeTracker.Entries())
{
entity.State = entityObject.EntityState;
}
context.SaveChanges();
}
}
public EntityObject GetEntitObject(Guid id)
{
EntityObject result;
using (var context = new Entities())
{
result = context.EntityObjectSet.Where(x => x.Id == Id);
}
return result;
}
}
每次我们使用EF进行操作时,我们都会创建一个新的实例上下文并做一些工作。我的问题是我在我的DalClass中有一个方法来获取EntityObjects列表,如下所示:
public List<EntityObject> GetEntityObjectsByIds(List<Guid> idList)
{
using (var context = new Entities())
{
var query = from entityObject in context.EntityObjectSet
where idList.Contains(entityObject.Id)
select entityObject;
return query.ToList();
}
}
将List返回到Business Layer类后。我对每个EntityObject做了一些更改,计算,更改了一些属性值等等。之后,我从我的BusinessLayer类调用一个方法,用这个方法保存新编辑的List:
public void UpdateEntityObjects(List<EntityObject> newEntityObjectList)
{
using (var context = new Entities())
{
var idList = entityObjectList.Select(x => x.Id).ToList();
var query = from entityObject in context.EntityObjectSet
where idList.Contains(entityObject.Id)
select entityObject;
var entityObjectList = query.ToList();
entityObjectList = newEntityObjectList;
context.ChangeTracker.DetectChanges();
foreach (var entity in context.ChangeTracker.Entries())
{
entity.State = EntityState.Modified;
}
context.SaveChanges();
}
}
问题 我无法保存我在BusinessLayer中编辑的newEntityObjectList。显然这不起作用。
entityObjectList = newEntityObjectList;
那么保存newEntityObjectList的最佳方法是什么?
问题 我必须两次查询这个问题
var query = from entityObject in context.EntityObjectSet
where idList.Contains(entityObject.Id)
select entityObject;
解决方案2.问题可能是我为GetEntityObjectsByIds()和UpdateEntityObjects()使用一个Context实例。但在我们所有的Dal课程中,我们避免了这一点。即使我使用Context类的一个实例,这也不能解决问题1.那么如何保存newEntityObjectList?
答案 0 :(得分:1)
好吧,我的DAL课肯定是这样的:
class EntityObjectDAL
{
private ObjectContext/DbContext context = new ObjectContext/DbContext();
public List<EntityObject> GetObjects() { return context.EntityObjects.ToList(); }
// Tracked by context. Just change it in BL
public void SaveObjects() { context.SaveChanges(); }
// Just call SaveChanges(), no need for anything special...
public void InsertObject(EntityObject eo) { context.EntityObjects.Add(eo); }
public void UpdateObject(EntityObject eo) { context.Entry(eo).State = EntityState.Modified; }
}
保持简单......