无法使用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"/>-->

无法使用DbSet扩展更新实体

this.Configuration.AutoDetectChangesEnabled = false;

this.Configuration.AutoDetectChangesEnabled = true;

实际上,你是在告诉EF不要跟踪变化,因此状态将始终保持不变。

如果你想关闭它,你可以像这样手动添加它到跟踪器

this.m_context.Entry(entity).State = EntityState.Added; //or EntityState.Modified