0

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

4

2 回答 2

1

您可能想要使用 DbSet 的Local属性。请参阅文章为什么在使用实体框架时看不到属性 Local?如果你不使用 DbSets。

于 2012-04-19T13:35:32.627 回答
0

您需要使用不同的上下文。尝试初始化一个不同的上下文会起作用。

于 2012-04-05T11:23:14.513 回答