使用DBSet本地进行多个查询

时间:2013-01-17 18:17:46

标签: c# wpf entity-framework

我正在尝试使用本地DBSet运行查询,但我遇到了我提出的两个解决方案的问题。

解决方案1:这将运行查询并将查询结果绑定到结果控件,并且可以编辑数据并将其保存到数据库中。但是,如果我尝试在同一个表上运行另一个查询(如果我切换表一切正常),结果项不会更新(它会添加任何新结果,但任何旧结果应该不再存在)

            //This part gets a DBSet from the context with the passed in table
            Type t = context.GetType();
            dynamic myDBSet= t.InvokeMember(table,
                        BindingFlags.DeclaredOnly |
                        BindingFlags.Public | BindingFlags.NonPublic |
                        BindingFlags.Instance | BindingFlags.GetProperty, null, context, new object[0]);

            //This is the query I want to run. I am then loading it into the localDBSet
            ((IQueryable)myDBSet).AsQueryable().Where(condition).Load();
            results.ItemsSource = myDBSet.Local;

解决方案2:这将运行查询并正确绑定数据。此外,数据将针对所有新查询进行更新,但数据网格中的数据不再可编辑

            //This part gets a DBSet from the context with the passed in table
            Type t = context.GetType();
            dynamic myDBSet= t.InvokeMember(table,
                        BindingFlags.DeclaredOnly |
                        BindingFlags.Public | BindingFlags.NonPublic |
                        BindingFlags.Instance | BindingFlags.GetProperty, null, context, new object[0]);

            //This is the query I want to run. I am then loading it into the localDBSet
            ((IQueryable)myDBSet).AsQueryable().Where(condition).Load();
            DbSet copiedDBSet= myDBSet;
            results.ItemsSource = copiedDBSet.Local.AsQueryable().Where(condition);

有没有人有一个解决方案可以让我运行多个查询并仍然编辑数据?

1 个答案:

答案 0 :(得分:0)

  

有没有人有一个允许我运行多个查询的解决方案   并仍然编辑数据?

使用每个查询的上下文。

通过这种方式,您可以使用解决方案1并直接绑定到本地可观察集合。如果您不想要先前的查询结果,则无理由保留上下文。您是否有动态调用上下文dbset方法而不使用泛型context.Set<T>()

的任何原因