web-dev-qa-db-ja.com

EntityDataSourceとEntityFramework 6

ASP.NETを学んでいます。 EntityDataSorceコントロールに来ました。 EF6を使用しています。このコントロールとEF6にはいくつかの問題、競合があることを読みましたが、EntityDataSourceの最後の更新で、この問題は解決されました。 http://blogs.msdn.com/b/webdev/archive/2014/02/28/announcing-the-release-of-dynamic-data-provider-and-entitydatasource-control-for-entity-フレームワーク-6.aspx

上記のリンクをたどろうとしています。まず、.edmxモデルを作成します

enter image description here

NuGetを使用して新しいEntityDataSourceControをインストールします

enter image description here

2つのEntityDataSourceコントロールを追加し、そのうちの1つのプレフィックスをefに変更しました。だから私は2つのコントロールを持っていますそれらの1つは古いものでもう1つは新しく更新されています

enter image description here

古いものをクリックすると、構成ポップアップが表示され、[データソースの構成]画面が表示されます。しかし、新しいものをクリックしてもポップアップはありません。では、どうすればデータソースを構成できますか?これの何が問題になっていますか?

enter image description here

Web.config

    <?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.Microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  </configSections>
  <system.web>
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add Assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add Assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5"/>
    <pages>
      <controls>
        <add tagPrefix="ef" Assembly="Microsoft.AspNet.EntityDataSource" namespace="Microsoft.AspNet.EntityDataSource"/>
      </controls>
    </pages>
  </system.web>
  <connectionStrings>
    <add name="SampleDbEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=OMER-HP\SQLEXPRESS2014OK;initial catalog=SampleDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb"/>
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
  </entityFramework>
</configuration>

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication6.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <ef:EntityDataSource ID="EntityDataSourceNew" runat="server">
        </ef:EntityDataSource>
        <br />
        <asp:EntityDataSource ID="EntityDataSourceOld" runat="server">
        </asp:EntityDataSource>

    </div>
    </form>
</body>
</html>
9
Omer K

EF6を使用する場合、ユーザーインターフェイスはサポートされません。新しいプロジェクトにエンティティデータソースを使用することは推奨されなくなったため、EF6で使用できるデータソースを提供するための作業を行いました。マークアップで直接構成を実行する必要があります。

16
Rowan Miller

Dov Millerの答えは近いものでしたが、ContextTypeNameに付けた名前がわからなかったため、うまくいきませんでした。デザイナーでモデルを作成しましたが、ソリューションでObjectContextから派生した名前が見つかりませんでした。

だから私は多くのスレッドを見た後にこれをしました:

  1. ContextTypeNameの代わりに、クラスのSetプロパティを指すEntitySetNameプロパティを追加しました。

  2. EntityDataSourceを選択し、イベントOnContextCreatingをダブルクリックして、イベントメソッドを作成します。 DbContextをObjectContextに変換するために次のコードを入力し、IObjectContextAdapterを解決して適切なusing句を追加しました。

    var context = new MyModelContainer(); e.Context =((IObjectContextAdapter)context).ObjectContext;

最終的に、グリッドビューのデータソースとして機能しました。

このスレッド で上記の解決策を見つけました。user2076170による回答は、上記の手順2のイベントコードを示しています。ステップ1を自分で見つけました。

2
user173399

私もこの問題に遭遇し、「モデルバインディング」を見つけました http://www.asp.net/web-forms/overview/presenting-and-managing-data/model-binding/retrieveing-data

投稿は「CodeFirst」データモデルクラスを構築するプロセスを実行しますが、ItemTypeを「EFDesigner fromdatabase ...」プロセスで生成されたクラスに切り替えただけで問題なく動作しました。

これがまだ検索している人に役立つことを願っています。

マイク

1
Mike

このリンクから EntityDataSourceがEntityFramework 6 Upgradeで機能しない Sergeyの回答では、古いEntityDataSourceをツールボックスからデザイナーにドロップしてから、タグプレフィックスをefではなくaspに変更できることを学びました。 (私はここの質問へのSemindaのコメントのリンクに行きました)。その後、デザイナとプロパティウィンドウで作業を続けることができ、機能します。

そこでの答えは、EntityDataSourceのイベントを使用する場合は、背後にあるコードを変更する必要があることを示しています

から

protected void OnContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e){... } 

protected void OnContextCreating(object sender, Microsoft.AspNet.EntityDataSource.EntityDataSourceContextCreatingEventArgs e){... } 

ポイントは、Microsoft.AspNet.EntityDataSourceEventArgsに追加することです。

また、プロパティDefaultContainerNameConnectionStringを削除し、LMKのコメントに記載されているように、EntityDataSourceにContextTypeNameを設定するだけです。

これが、マークアップだけでなく、デザイナーでEntityDataSourceを使用したい人にも役立つことを願っています。

1
Dov Miller