如何强制实体框架查询运行
本文关键字:查询 运行 框架 实体 何强制 | 更新日期: 2023-09-27 18:06:06
我使用EF 6在WPF DataGrid中显示数据。数据似乎没有问题。但是我调用FormatGrid函数来做一些事情,比如用网格标题中的空格替换字段名中的下划线。我第一次运行查询时,它不起作用。它在DataGrid中找不到列。但在那之后,当我第二次运行查询时,它会找到我想要的列和格式。我试过将LazyLoadingEnabled设置为false。我已经尝试在查询结果上调用Count()。在第一次调用期间不会填充查询。是否有某种方法可以强制在EF查询中加载列,或者是否应该在网格中使用稍后的事件来格式化数据?
private void LoadStores()
{
dgvStores.ItemsSource = null;
using (var oContext = new FiduciaEntities())
{
oContext.Configuration.LazyLoadingEnabled = false;
var oQuery = from sd in oContext.StoreDefs
where sd.franchise == false
orderby sd.store_no
select new
{
Store_No = sd.store_no,
Store_Name = sd.store_name,
County = c.County1,
_StoreID = sd.id
};
dgvStores.ItemsSource = oQuery.ToList();
dgvStores.SelectedValuePath = "_StoreID";
int iCount = oQuery.Count();
FormatGrid(ref dgvStores);
}
}
private void FormatGrid(ref DataGrid oDataGrid)
{
foreach (DataGridColumn oColumn in oDataGrid.Columns)
{
string sHeader = oColumn.Header.ToString();
if (sHeader.Length > 0)
{
if (sHeader.Substring(0, 1) == "_")
{
oColumn.Visibility = System.Windows.Visibility.Hidden;
oColumn.Header = oColumn.Header.ToString().Replace("_", "");
}
}
oColumn.Header = oColumn.Header.ToString().Replace("_", " ");
}
}
您没有提到您是否验证了问题是在查询中没有返回数据还是网格根本没有显示数据。我要先确定。
如果调试代码,在行(实际运行查询的地方)放置一个断点:
dgvStores.ItemsSource = oQuery.ToList();
第一次运行后是否看到返回的数据?
我已经解决了这个问题,但它不是一个优雅的解决方案。如果有人有更好的解决方案,请张贴。我将FormatGrid代码移到了网格加载事件中。这似乎行得通。
private void dgvStores_Loaded(object sender, RoutedEventArgs e)
{
if (dgvStores.Columns.Count > 0)
{
DataGrid oDataGrid = (DataGrid)sender;
Utilities.FormatGrid(ref oDataGrid);
}
}