web-dev-qa-db-ja.com

GridViewで使用するためにDBContextをObjectContextに変換します

データを永続化するために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」にキャストできません。

29
Myster

これを試して:

var context = new YourDbContext();
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;
72
marianosz

これを試してください->

protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)  
{   
    var context = new YourContext();
    e.Context = ((IObjectContextAdapter)context).ObjectContext;
}
4
user2076170

苦労して2日後、私はこれを見つけました link これは非常に役に立ちました.VS 2012で作業していて、DBContextで同じ問題がありました。
リンクによると、VS2012では、VS2010でデフォルトであったEntityObjectおよびObjectContextから派生したエンティティとは対照的に、デフォルトのコードジェネレーターがPOCOエンティティおよびDBContextを生成するように変更されました。
ソリューションエクスプローラーのエンティティモデルの下で、ttテンプレートを削除し、デザイナーでデザイナー画面を右クリックして、プロパティでコード生成戦略を[なし]から[デフォルト]に変更してEntityObjectを取得します。ベースのエンティティとObjectContext派生コンテキスト。

2
AAAA