我是 stackoverflow 的新用户,这是我的第一个问题,希望我不会违反任何规则:)...
在我的带有 EF4 和 UnitOfWork 模式的 MVC3 项目中,
添加新实体时,我必须检查新添加的实体和已存储在数据库中的实体并计算新实体中的列。
问题是如果我从数据库中获取新添加的实体的值将不会被考虑在内。
我通过在每个实体插入后保存工作单元来克服这个问题。但这意味着每次插入特定实体时都会保存上下文的当前状态。
我想知道这是否会在未来带来一些性能问题。如果是这样,还有其他方法可以解决问题吗?
这是有关该问题的相关代码(简化)
模型 :
public class Group
{
public Guid GroupId { get; set; }
public int Code { get; set; }
}
控制器 :
UserGroup Group1 = new Group()
{
UserGroupId = Guid.NewGuid(),
Code = (int)Math.Pow(2, (unitOfWork.GroupRepository.Get().Count()));
};
unitOfWork.GroupRepository.Insert(Group1);
UserGroup Group2 = new Group()
{
UserGroupId = Guid.NewGuid(),
Code = (int)Math.Pow(2, (unitOfWork.GroupRepository.Get().Count()));
};
unitOfWork.GroupRepository.Insert(Group2);
插入方法:(源自通用存储库不发送所有存储库模式)
public virtual void Insert(Group grouptoadd)
{
UnitOfWork unitOfWork = new UnitOfWork(Context);
dbSet.Add(grouptoadd);
unitOfWork.Save();
}
如果我不将 UnitOfWork 保存在 GroupRepository 类的 Insert 方法中,那么在计算 Group2 的代码时,它不会考虑 Group1。
将 unitOfWork 保存在 insert 方法中似乎不正确。试图从上下文中获取值
(int)Math.Pow(2, (Context.Groups.Count()));
此代码始终返回 1。我可以在调试模式下看到 Context 中的实体,但 Count 返回 0。
最后我需要:(新添加的实体+存储在数据库中的实体).Count()