29

EFコードファーストを使用してデータを永続化するWebフォームプロジェクトがあります。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'にキャストできません。

4

3 に答える 3

74

これを試して:

var context = new YourDbContext();
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;
于 2011-11-10T18:54:57.063 に答える
4

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

protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)  
{   
    var context = new YourContext();
    e.Context = ((IObjectContextAdapter)context).ObjectContext;
}
于 2013-02-15T16:06:01.787 に答える
2

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

于 2013-09-18T11:42:13.783 に答える