データを永続化するためにEF codefirstを使用するwebformsプロジェクトがあります。 CRUDの記述を節約するために、GridViewとEntityDataSourceを使用したいと思います。これは可能ですか?
DBContextをEntityDataSourceが期待するObjectContextに変換できますか?
これが私が試したものです:
<asp:EntityDataSource ID="OrdersDataSource" runat="server" ContextTypeName="SomeNamespace.Models.ShopDBContext"
EnableFlattening="False" EntitySetName="Orders" EntityTypeFilter="Order" EnableDelete="False"
EnableUpdate="False" Include="OrderLines" OrderBy="it.Id">
</asp:EntityDataSource>
<asp:GridView ID="OrdersGridView" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="True" DataKeyNames="Id" DataSourceID="OrdersDataSource" />
しかし、私はこの例外を受け取ります:
タイプ「SomeNamespace.Models.ShopDBContext」のオブジェクトをタイプ「System.Data.Objects.ObjectContext」にキャストできません。
これを試して:
var context = new YourDbContext();
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;
これを試してください->
protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)
{
var context = new YourContext();
e.Context = ((IObjectContextAdapter)context).ObjectContext;
}
苦労して2日後、私はこれを見つけました link これは非常に役に立ちました.VS 2012で作業していて、DBContextで同じ問題がありました。
リンクによると、VS2012では、VS2010でデフォルトであったEntityObjectおよびObjectContextから派生したエンティティとは対照的に、デフォルトのコードジェネレーターがPOCOエンティティおよびDBContextを生成するように変更されました。
ソリューションエクスプローラーのエンティティモデルの下で、ttテンプレートを削除し、デザイナーでデザイナー画面を右クリックして、プロパティでコード生成戦略を[なし]から[デフォルト]に変更してEntityObjectを取得します。ベースのエンティティとObjectContext派生コンテキスト。