Элемент управления Entity DataSource в приложении DynamicData, ссылающийся на проект MVC CodeFirst - PullRequest
1 голос
/ 09 января 2012

Я добавил веб-приложение Dynamic Data в качестве второго проекта в приложение MVC 3.Приложение Dynamic Data ссылается на производный контекст EF 4.1 в приложении MVC 3 (сначала код).

DefaultModel.RegisterContext(
    new EFCodeFirstDataModelProvider(() => new MvcApplication1.Models.Context()),
    new ContextConfiguration() { ScaffoldAllTables = true });

Я хочу опробовать элемент управления Dynamic 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>

Ответы [ 2 ]

1 голос
/ 13 января 2012

Шаблоны 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)); }
}

Тогда Global может содержать это:

routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
    Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
    Model = ModeContainer<ContactsModel.ContactsEntities>.Model
});

И тогда вы можете сделатьтакие вещи, как это на странице, чтобы использовать динамические вне маршрута:

protected void Page_Init(object sender, EventArgs e)
{
    MetaTable table = ModeContainer<ContactsModel.ContactsEntities>.Table<Person>();
    GridView1.SetMetaTable(table);
}

Вдоль стороны сетки и источника, как это:

<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>
1 голос
/ 09 января 2012

Элементу управления EntityDataSource требуется ObjectContext (контекст Database First), а не DbContext (контекст Code First).Этот туториал покажет, как использовать EntityDataSource, и ему менее года: http://www.asp.net/web-forms/tutorials/getting-started-with-ef

...