在请求结束之前,实体框架无法读取新数据

时间:2014-02-16 17:25:25

标签: c# entity-framework

我创建了新的权利

    public int RegisterUser(string userName, string password)
    {
        var model = new User();

        model.UserName = userName;

        var salt = this.saltProvider.StringSalt();
        model.Salt = salt;

        model.Password = this.encryptionSerivce.Hash(password, options => options.WithStringSalt(salt));

        this.ValidateUser(model);

        this.users.Create(model);
        this.users.Save();

        return model.UserId;
    }

this.users.Create的样子如下:

    public void Create(T entity)
    {
        this.dbSet.Add(entity);
    }

并保存:

    public void Save()
    {
        this.dbContext.SaveChanges();
    }

我的问题:通话后Save()更改仍在本地属性中: Debug

所以,当我尝试添加实体时(例如this.users.Fetch(usr => usr.UserName == "Just added user name") 我会变为空。

我的提取看起来像:

    public IEnumerable<T> Fetch(Expression<Func<T, bool>> predicate)
    {
        return this.dbSet.Where(predicate);
    }

有些荒谬,在请求结束后,数据被放入db: db result

我可以在下一个请求中访问int。我做错了什么?

为什么我在DbContext上调用SaveChanges()之后无法访问新添加的entites?

1 个答案:

答案 0 :(得分:0)

因为SaveChanges()的作用是保存对数据库的更改,丢弃Dbcontext的更改。

这就是为什么当您在相同请求中执行this.dbSet.Where(predicate)时,您无法获得刚刚保存的对象。在您使用全新的Dbcontext

再次查询数据库之前

如果您执行SaveChanges(false),则可以实现所需,保存更改,同时将更改保留在同一请求中。