如何在保存unitofwork模式之前从上下文中获取实体以通过先前添加的实体计算字段?

时间:2012-04-05 11:01:50

标签: asp.net-mvc-3 entity-framework-4 unit-of-work dbcontext

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

2 个答案:

答案 0 :(得分:1)

您可能想要使用DbSet的Local属性。如果您不使用DbSets,请参阅文章Why can I not see the property Local when using Entity Framework?

答案 1 :(得分:0)

您需要使用不同的上下文。尝试初始化不同的上下文就可以了。