刷新System.Data.Entity.DbContext中的数据

时间:2016-03-07 16:50:20

标签: c# entity-framework sqlite xtragrid

我们将数据存储在SQLite数据库中。数据显示在DevExpress.XtraGrid.GridControl中。为了获得相关数据,我们创建临时表并填写它。 数据背景:

public class AccountsSQLiteDataContext : DbContext
{
    public AccountsSQLiteDataContext(IDbConnection connection)
        : base((SQLiteConnection)connection, false)
    {
        Database.SetInitializer<AccountsSQLiteDataContext>(null);
    }

    public DbSet<tmp_acc> TmpAccounts { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

使用DbContext:

AccountsSQLiteDataContext myContext = new AccountsSQLiteDataContext(myDbConnection);

public IQueryable AccountTable
{
    get
    {
        return myContext.TmpAccounts;
    }
}

DevExpress.Data.Linq.LinqServerModeSource myLinqSource =  = new DevExpress.Data.Linq.LinqServerModeSource();
myLinqSource.QueryableSource = AccountTable;
myGridControl.DataSource = myLinqSource;

数据更改后,我致电:myLinqSource.Reload();

并非所有SQLite临时表中的数据更改都以网格显示。添加和删​​除表行会生效。但是没有显示单元格文本的更改。 过滤器功能将使用新值生效。见printscreen。在过滤器选项中是正确的值,在网格中是旧值。

如何刷新存储在DbContext中的本地数据,以便在临时表中更改后显示正确的值?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我找到了两个解决方案。它们都取消了EF数据模型中项目的缓存:

  1. 在SQL表中使用自动增量字段,在任何数据更改后重新创建表
  2. 使用AsNoTracking扩展方法从数据库加载实体:

    public IQueryable AccountTable {     得到     {         return myContext.TmpAccounts.AsNoTracking();     } }