无法使用DbSet扩展更新实体
本文关键字:扩展 更新 实体 DbSet | 更新日期: 2023-09-27 18:16:40
我在使用实体框架更新数据库时遇到问题。当调用Update(T x)方法但SaveChanges()返回0时,m_entities设置已被更改。我进行了调试,实体状态仍然不变。这是我的Repository类。
public class Repository<T> : IRepository<T> where T : class
{
private readonly IApplicationDbContext m_context;
internal IDbSet<T> m_entities;
public Repository(IApplicationDbContext m_context)
{
this.m_context = m_context;
this.m_entities = this.m_context.Set<T>();
}
public void Update(T x)
{
this.m_entities.AddOrUpdate(x);
}
public void SaveChanges()
{
this.m_context.SaveChanges();
}
}
DbContext类
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IApplicationDbContext
{
public ApplicationDbContext()
: base("name=DefaultConnection")
{
this.Configuration.AutoDetectChangesEnabled = false;
this.Configuration.ValidateOnSaveEnabled = false;
}
}
和连接字符串。
<connectionStrings>
<!--<add providerName="System.Data.SqlClient" name="DefaultConnection" connectionString="Data Source=LWCGRGTG75SJU9M; Initial Catalog=HPDB; MultipleActiveResultSets=true; Integrated Security=False; User Id=sa; Password=123456"/>-->
this.Configuration.AutoDetectChangesEnabled = false;
this.Configuration.AutoDetectChangesEnabled = true;
实际上,你是在告诉EF不要跟踪变化,因此状态将始终保持不变。
如果你想关闭它,你可以像这样手动添加它到跟踪器
this.m_context.Entry(entity).State = EntityState.Added; //or EntityState.Modified