Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在保存unitofwork模式以通过先前添加的实体计算字段之前,如何从上下文中获取实体?_Asp.net Mvc 3_Entity Framework 4_Unit Of Work_Dbcontext - Fatal编程技术网

Asp.net mvc 3 在保存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来克服这个问题。但这意味着每次插入特定实体时都要保存上下文的当前状态 我想知道这是否会在将来带来一些性能问题。如果是的话,还有其他办法解决这个问题吗 以下是有关该问题的相

我是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()));