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)。