1

MVC 3アプリケーションに2番目のプロジェクトとしてDynamic Data Webアプリケーションを追加しました。 Dynamic Dataアプリケーションは、MVC 3アプリケーションの派生EF 4.1コンテキストを参照します(コードが最初にあります)。MVC CodeFirstプロジェクトを参照するDynamicDataアプリケーションのEntity DataSourceコントロール

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

ダイナミックGridViewコントロールを試してみたいと思いますが、データソースコントロールを構成する方法がわかりません。私のMVCアプリケーションからの接続文字列は、コントロールのために動作しませんでした。ビルド後もコントロールの設定ウィザードに何も表示されません。私は完全にwebforms/datasource文盲です。私はここから離れていますか?これはどうすればいいですか?

<%@ 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> 
+0

すべてのチュートリアルは3〜4歳のようです。 – Benjamin

答えて

1

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)); } 
} 

次にグローバルこの含めることができます。

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> 
+0

I代わりにMvc Scaffoldingに切り替えました。 T4はそれほど難しくありませんでした。パッケージマネージャコンソールで 'foreach'を使うことができれば、足場は自動的に70+クラスになります。 – Benjamin

+0

私はあなたのソリューションをご覧くださいできますか? ...私は今これを見ている...退職MVPのビジネスケースを構築しようとしていて、私の同僚の一人は、Webフォームの動的データが自動ビュー構築をどのようにして行うのが好きだと言います。 – War

1

EntityDataSourceコントロールは、ObjectContextは(データベースまず文脈)、ないDbContext(コードファーストコンテキスト)が必要です。このチュートリアルでは、EntityDataSourceを使用する方法を示し、1年未満です: http://www.asp.net/web-forms/tutorials/getting-started-with-ef

+0

ありがとう、私はそれをチェックアウトします。しかしDavid EbboはEF 4.1のコードで最初に動作すると言います[link](http://blog.davidebbo.com/2011/01/using-dynamic-data-with-ef-code-first.html) – Benjamin

+0

MVCと動的データを一緒に行う方法を示すセクション?私はMVCで設計されたデータモデルを持っていて、動的なデータを2番目のプロジェクトとして追加するか、それらを一緒にマージしたいと思います。私は動的データプロジェクトのための新しいデータモデルを作成したくありません。 – Benjamin

+1

David Ebboのアプローチ#1を使用して同様のシナリオを試みました(Dynamic DataプロジェクトをMVC Code Firstプロジェクトのソリューションに追加しました)。あなたは| DataDirectory |あなたの接続文字列で?その場合は、MVCアプリのApp_Dataフォルダ内の.sdfまたは.mdfに完全なアドレスを提供する必要があります。 – tdykstra

関連する問題