Asp.net mvc 3 在保存unitofwork模式以通过先前添加的实体计算字段之前,如何从上下文中获取实体?
我是stackoverflow的新用户,这是我的第一个问题,希望我不会违反任何规则:) 在我的带有EF4和UnitOfWork模式的MVC3项目中 添加新实体时,我必须检查新添加的实体和数据库中已存储的实体,并计算新实体中的列 问题是,如果我从数据库中获取值,则不会考虑新添加的实体 我通过在每个实体插入后保存unitofwork来克服这个问题。但这意味着每次插入特定实体时都要保存上下文的当前状态 我想知道这是否会在将来带来一些性能问题。如果是的话,还有其他办法解决这个问题吗 以下是有关该问题的相关代码(简化) 型号:Asp.net mvc 3 在保存unitofwork模式以通过先前添加的实体计算字段之前,如何从上下文中获取实体?,asp.net-mvc-3,entity-framework-4,unit-of-work,dbcontext,Asp.net Mvc 3,Entity Framework 4,Unit Of Work,Dbcontext,我是stackoverflow的新用户,这是我的第一个问题,希望我不会违反任何规则:) 在我的带有EF4和UnitOfWork模式的MVC3项目中 添加新实体时,我必须检查新添加的实体和数据库中已存储的实体,并计算新实体中的列 问题是,如果我从数据库中获取值,则不会考虑新添加的实体 我通过在每个实体插入后保存unitofwork来克服这个问题。但这意味着每次插入特定实体时都要保存上下文的当前状态 我想知道这是否会在将来带来一些性能问题。如果是的话,还有其他办法解决这个问题吗 以下是有关该问题的相
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);
Insert方法:(从通用存储库派生,不发送所有存储库模式)
如果我不将UnitOfWork保存在GroupRepository类的Insert方法中,那么在计算Group2的代码时,它不会考虑Group1
在insert方法中保存unitOfWork似乎不正确。试图从上下文中获取值
(int)Math.Pow(2, (Context.Groups.Count()));
此代码始终返回1。我可以在调试模式下看到上下文中的实体,但Count返回0
最后,我需要:(新添加的实体+存储在数据库中的实体)。Count()您需要使用不同的上下文。尝试初始化一个不同的上下文,它将起作用。您可能需要使用DbSet的
Local
属性。如果不使用dbset,请参阅本文。无法理解初始化不同上下文的含义。你能说得更具体些吗?如果我在概念上落后很多,那么提供一个供进一步阅读的链接是很好的。这是如何解决的,但这意味着每次插入特定实体时都要保存上下文的当前状态?不更糟糕的是:它会整合问题。您是否期望并发问题,或者为什么不只调用一次unitOfWork.GroupRepository.Get().Count()
,然后在添加新组的循环中增加计数?当您询问可能出现的性能问题时,您通常会在该过程中添加多少组
s?至少目前为止,在该过程中没有并发的可能性。根据其他实体的不同,在过程中添加了5-10个组。您能够理解这一表述不清的问题真是太棒了:)是的,我可以获得实体列表,包括插入EF但尚未保存到数据库中的实体,以及该本地属性。
(int)Math.Pow(2, (Context.Groups.Count()));