Asp.net mvc 引用MVC CodeFirst项目的DynamicATA应用程序中的实体数据源控件

Asp.net mvc 引用MVC CodeFirst项目的DynamicATA应用程序中的实体数据源控件,asp.net-mvc,entity-framework,datasource,dynamic-data,entitydatasource,Asp.net Mvc,Entity Framework,Datasource,Dynamic Data,Entitydatasource,我在MVC3应用程序中添加了一个动态数据web应用程序作为第二个项目。动态数据应用程序在MVC 3应用程序中引用派生的EF 4.1上下文(代码优先) 我想尝试一个动态GridView控件,但我不知道如何配置DataSource控件。我的MVC应用程序中的连接字符串对控件无效。即使在生成之后,控件的配置向导中也不会显示任何内容。我完全不懂网络表单/数据源。我离这儿远吗?我该怎么做 <%@ Control Language="C#" AutoEventWireup="true" CodeBeh

我在MVC3应用程序中添加了一个动态数据web应用程序作为第二个项目。动态数据应用程序在MVC 3应用程序中引用派生的EF 4.1上下文(代码优先)

我想尝试一个动态GridView控件,但我不知道如何配置DataSource控件。我的MVC应用程序中的连接字符串对控件无效。即使在生成之后,控件的配置向导中也不会显示任何内容。我完全不懂网络表单/数据源。我离这儿远吗?我该怎么做

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.DynamicData.CustomPages.WebUserControl1" %>

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>

<asp:DynamicDataManager ID="DynamicDataManager1" runat="server" />
    <DataControlReference ControlID="GridView1"/>
</asp:DynamicDataManager>

<asp:EntityDataSource ID="EntityDataSource1" runat="server">
</asp:EntityDataSource>

EntityDataSource控件需要ObjectContext(数据库优先上下文),而不是DbContext(代码优先上下文)。本教程介绍了如何使用EntityDataSource,它还不到一年:

DD模板远远落后

将其添加到文件:

using System.Linq;
using System.Web.DynamicData;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
public static class ModeContainer<OC> where OC : ObjectContext
{
    private static MetaModel model = new MetaModel();
    static ModeContainer() { model.RegisterContext(typeof(OC), new ContextConfiguration() { ScaffoldAllTables = true }); }
    public static MetaModel Model { get { return model; } }
    public static MetaTable Table<EO>() where EO : EntityObject { return Model.Tables.First(x => x.EntityType == typeof(EO)); }
}
使用System.Linq;
使用System.Web.dynamicATA;
使用System.Data.Object;
使用System.Data.Objects.DataClass;
公共静态类ModeContainer,其中OC:ObjectContext
{
私有静态元模型模型=新元模型();
静态ModeContainer(){model.RegisterContext(typeof(OC),new ContextConfiguration(){ScaffoldAllTables=true});}
公共静态元模型模型{get{return Model;}}
公共静态元表()其中EO:EntityObject{return Model.Tables.First(x=>x.EntityType==typeof(EO));}
}
然后,Global可以包含以下内容:

routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
    Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
    Model = ModeContainer<ContactsModel.ContactsEntities>.Model
});
routes.Add(新的DynamicDataRoute(“{table}/{action}.aspx”)
{
约束=新建RouteValueDictionary(新建{action=“List | Details | Edit | Insert”}),
Model=ModeContainer.Model
});
然后,您可以在页面中执行类似的操作,以在路由之外使用dynamic:

protected void Page_Init(object sender, EventArgs e)
{
    MetaTable table = ModeContainer<ContactsModel.ContactsEntities>.Table<Person>();
    GridView1.SetMetaTable(table);
}
受保护的无效页\u Init(对象发送方,事件参数e)
{
MetaTable=ModeContainer.table();
GridView1.SetMetaTable(表格);
}
沿着网格和源的一侧,如下所示:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="Id" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
    <SelectedRowStyle BackColor="Azure" />
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" />
        <asp:DynamicField DataField="Contacts" />
        <asp:DynamicField DataField="Addresses" />
    </Columns>
</asp:GridView>


<asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=ContactsEntities" DefaultContainerName="ContactsEntities" EntitySetName="People" EnableDelete="True" EnableInsert="True" EnableUpdate="True" EntityTypeFilter="Person">
</asp:EntityDataSource>


似乎所有的教程都有3-4年的历史了。谢谢,我会看看的。但是David Ebbo说它可以与EF 4.1代码一起工作。首先,这里有一节介绍如何将MVC和动态数据结合起来吗?我的数据模型都是用MVC设计的,我想将动态数据作为第二个项目添加,或者将它们合并在一起。我不想为动态数据项目创建新的数据模型。我只是使用David Ebbo的方法1尝试了一个类似的场景(将动态数据项目添加到具有MVC代码优先项目的解决方案中),它正在工作。您的连接字符串中有| DataDirectory |吗?如果是这样,您必须在MVC应用程序的app_数据文件夹中提供.sdf或.mdf的完整地址。我认为您的上下文注册应该如下所示:DefaultModel.RegisterContext(()=>{return((IObjectContextAdapter)new MVCapApplication1.Models.context()).ObjectContext;},new ContextConfiguration(){ScaffoldAllTables=true});是的,我相信您必须在每个项目的Web.config文件中维护连接字符串。但是,您可以设置Web.config转换,以便在部署时自动进行更改。看,我改成了Mvc脚手架。T4并不像看上去那么难,在package manager控制台中使用
foreach
的功能使脚手架70+类自动生成。我可以看看您的解决方案吗。。。我现在正在看这个。。。我的一位同事试图为退休的MVP构建一个商业案例,他说他喜欢webforms中的动态数据如何进行自动视图构建。
<asp:GridView ID="GridView1" runat="server" DataKeyNames="Id" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
    <SelectedRowStyle BackColor="Azure" />
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowSelectButton="True" />
        <asp:DynamicField DataField="Contacts" />
        <asp:DynamicField DataField="Addresses" />
    </Columns>
</asp:GridView>


<asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=ContactsEntities" DefaultContainerName="ContactsEntities" EntitySetName="People" EnableDelete="True" EnableInsert="True" EnableUpdate="True" EntityTypeFilter="Person">
</asp:EntityDataSource>