我有一个使用EF codefirst的webforms项目来保存数据。 我想使用GridView和EntityDataSource,以节省写入CRUD。 这可能吗?
我可以将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”。
答案 0 :(得分:72)
试试这个:
var context = new YourDbContext();
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;
答案 1 :(得分:4)
试试这个 - &gt;
protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)
{
var context = new YourContext();
e.Context = ((IObjectContextAdapter)context).ObjectContext;
}
答案 2 :(得分:2)
经过2天的挣扎,我发现这个link给了我很多帮助。我正在使用VS 2012,我和DBContext有同样的问题。
根据链接,在VS2012中,默认代码生成器被更改为生成POCO实体和DBContext,而不是从VS2010中默认的EntityObject和ObjectContext派生的实体。
在解决方案资源管理器中,在您的实体模型下,您需要删除tt模板,并在设计器中右键单击设计器表面,然后在属性中将代码生成策略从None更改为Default以获取基于EntityObject的实体和ObjectContext派生上下文。