我是stackoverflow中的新用户,这是我的第一个问题希望我不会破坏任何规则:)...
在我的带有EF4和UnitOfWork Pattern的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的Code时,它将不会考虑Group1。
在insert方法中保存unitOfWork似乎不对。试图从Context
获取值(int)Math.Pow(2, (Context.Groups.Count()));
此代码始终返回1.我可以在调试模式下看到Context中的实体,但Count返回0。
最后我需要:(新添加的实体+存储在数据库中的实体).Count()
答案 0 :(得分:1)
您可能想要使用DbSet的Local
属性。如果您不使用DbSets,请参阅文章Why can I not see the property Local when using Entity Framework?。
答案 1 :(得分:0)
您需要使用不同的上下文。尝试初始化不同的上下文就可以了。