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

C# 在请求结束之前,实体框架无法读取新数据,c#,entity-framework,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 =

我创造了新的实体

    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 IEnumerable<T> Fetch(Expression<Func<T, bool>> predicate)
    {
        return this.dbSet.Where(predicate);
    }
并保存:

    public void Save()
    {
        this.dbContext.SaveChanges();
    }
我的问题:调用
Save()
后,更改仍在本地属性中:

因此,当我试图获取刚刚添加的实体(如
this.users.Fetch(usr=>usr.UserName==“刚刚添加的用户名”)
时,我得到的是空值。

我的回执看起来像:

    public void Create(T entity)
    {
        this.dbSet.Add(entity);
    }
    public IEnumerable<T> Fetch(Expression<Func<T, bool>> predicate)
    {
        return this.dbSet.Where(predicate);
    }
public IEnumerable获取(表达式谓词)
{
返回this.dbSet.Where(谓词);
}
可笑的是,在请求结束后,数据被放入数据库:

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


为什么我在DbContext上调用SaveChanges()后就不能访问新添加的实体?

因为
SaveChanges()
所做的是保存对数据库的更改,并放弃对
DbContext
的更改

这就是为什么当您在相同的请求中执行
this.dbSet.Where(谓词)
时,您不会得到刚才保存的对象。除非您使用新的
数据库上下文再次查询数据库,否则


如果执行
保存更改(false)
,您可以实现您所需的功能,保存更改,同时将其保存在相同的请求中。

您在调用
RegisterUser
之前是否打开了事务?保存更改后,
db
上是否有您的记录?为什么在保存后从db获取记录,而您不需要,因为您有实体。您是否可能正在工作g在不同的上下文中?事务未打开,保存后数据库中没有记录。我想对整个表执行复杂的查询,当前新的记录未包含在结果中。我不想获取所有实体,添加新实体,并执行服务器端查询,而不是数据库端。嗯…我使用autofac注入dbcontext,它是set到InstancePerapRequest。无论如何,我认为它是同一个实例,但我会在几分钟后确定。嗯……我会检查它。但听起来很有希望!不幸的是,SaveChanges是无参数的。(EF 6)。