EntityInstantFeedbackSource
コントロールへのデータソースとしてDevExpressを使用していますXtraGrid
。ただし、app.config
ファイルの接続文字列は使用していません。むしろ、実行時にエンティティフレームワークの接続文字列を設定しています。
コードを以下に示します。
void Form1_Load(object sender, EventArgs e)
{
entityInstantFeedbackSource1.KeyExpression = "Prodid";
entityInstantFeedbackSource1.GetQueryable += entityInstantFeedbackSource1_GetQueryable;
entityInstantFeedbackSource1.DismissQueryable += entityInstantFeedbackSource1_DismissQueryable;
gridControl1.DataSource = null;
gridControl1.DataSource = entityInstantFeedbackSource1;
}
void entityInstantFeedbackSource1_GetQueryable(object sender, GetQueryableEventArgs e)
{
EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder();
ecsb.Metadata = @"res://*/Model2.csdl|res://*/Model2.ssdl|res://*/Model2.msl";
ecsb.Provider = @"System.Data.SqlClient";
ecsb.ProviderConnectionString = @"data source=.\sqlexpress;initial catalog=AdventureWorks; integrated security=True;MultipleActiveResultSets=True;App=EntityFramework";
using (var context = new ObjectContext(ecsb.ConnectionString))
{
context.DefaultContainerName = "AdventureWorksEntities";
ObjectSet<Person> query = context.CreateObjectSet<Person>();
var q = from s in query
select s;
e.QueryableSource = q;
e.Tag = context;
}
}
void entityInstantFeedbackSource1_DismissQueryable(object sender, GetQueryableEventArgs e)
{
((ObjectContext)e.Tag).Dispose();
}
グリッドは空白です。ただし、「query」の周りにforeachループを記述して出力を表示するとConsole.WriteLine
、データを表示できます。
また、設定e.QueryableSource = q.ToArray().AsQueryable()
すると、グリッドにデータが表示されます。ただし、これを行うと、の利点が無効になるため、一度にすべてのデータが読み込まれますEntityInstantFeedbackSource
。
クエリにデータがないのはなぜですか?そして、ObjectSetをグリッドコントロールにデータバインドする方法は?