2014-09-14 9 views
8

Я изучаю 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-framework-6.aspxEntityDataSource и Entity Framework 6

Я пытаюсь следовать за ссылкой. Сначала я создаю модель EDMX-

enter image description here

Установить новый EntityDataSource Contro с NuGet

enter image description here

я добавил два элемента управления EntityDataSource и измененный префикс одного из них эф. Таким образом, у меня есть два управления один из них является старый и другой один новый обновленный

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

удалите объект EntityDataSource и добавьте его снова. Это может сработать – Seminda

+1

Также это может вам помочь. http://stackoverflow.com/questions/19792144/entity-datasource-not-working-with-entity-framework-6-upgrade – Seminda

+0

@Seminda, к сожалению, они не помогли –

ответ

12

Пользовательский интерфейс не поддерживается при использовании Ef6. Мы больше не рекомендуем использовать источник данных Entity для новых проектов, поэтому мы просто выполнили работу по предоставлению источника данных, который можно использовать с EF6. Вам необходимо выполнить настройку непосредственно в разметке.

+1

Привет, Роуэн, я видел ваши очень полезные видео на [Блок фреймворков сущностей MSDN.] (Http://channel9.msdn.com/Blogs/EF/). [Код сначала для существующей базы данных был просто отличным.] (Http://channel9.msdn.com/Blogs/EF/ Код-первых к существующей базе данных-EF6-1-Onwards--). В настоящее время мы пытаемся использовать сторонний веб-сервис в модели EE. Можете ли вы поделиться видео, как это сделать. Третья сторона - программное обеспечение ERP. У нас есть веб-модуль asp.net, который нам нужно настроить для использования этого веб-сервиса. – bonCodigo

+10

Какой «рекомендуемый способ для новых проектов? – user957479

+2

I второй @ пользователь957479. Можете ли вы рассказать о рекомендуемом подходе к новым проектам? Вы можете предположить, что вместо этого следует использовать привязку к модели? Но что, если у кого-то есть «QueryableExtender», привязанный к источнику данных? Может ли это быть реплицировано с привязкой к модели как чисто? – julealgon

1

Я столкнулся с этой проблемой, так и я нашел «модель связывания» http://www.asp.net/web-forms/overview/presenting-and-managing-data/model-binding/retrieving-data

Пост проходит через процесс создания классов модели данных «Code First», однако я просто переключил ItemType с классами, генерируемых с помощью процесс «EF Designer from database ...», и он работал отлично.

Надеюсь, это поможет кому-то, кто все еще ищет.

Майк

1

я узнал из этой ссылки Entity DataSource not working with Entity Framework 6 Upgrade в ответе Сергея, что вы можете удалить старую EntityDataSource из панели инструментов дизайнера, а затем изменить префикс тега ef вместо asp. (Я получил ссылку на комментарий Семинды к вопросу здесь). После этого вы можете продолжить работу с ним в окне конструктора и свойств, и он работает.

Ответ там говорится, что если вы используете события EntityDataSource вы должны изменить код за

От

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

К

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

Суть в том, чтобы добавить Microsoft.AspNet.EntityDataSource к EventArgs.

Также удалите свойства DefaultContainerName и ConnectionString и просто установите ContextTypeName на EntityDataSource, как указано в комментарии LMK.

Я надеюсь, что это поможет тем, кто все еще хочет использовать EntityDataSource с дизайнером, а не только через разметку.

1

Ответ Дова Миллера был близок, но не работал для меня, потому что я не понял, какое имя я ставлю для ContextTypeName. Я создал свою модель с дизайнером, и я не нашел ни одного имени, полученного из ObjectContext в решении.

Так что я сделал это после того, глядя на многих нитей:

  1. Вместо ContextTypeName, добавил EntitySetName свойство, указывающее на набор свойств моего класса.

  2. Выбранный объект EntityDataSource и дважды щелкнул по событию OnContextCreating для создания метода события. Ввел в него следующий код, чтобы преобразовать DbContext в ObjectContext и разрешить IObjectContextAdapter, чтобы добавить соответствующее предложение use.

    var context = new MyModelContainer(); контекст e.Context = ((IObjectContextAdapter)) .ObjectContext;

Он, наконец, работал в качестве источника данных для gridview.

Найдено выше решение в this thread, где ответ пользователя2076170 показывает код события на шаге 2 выше. Я нашел первый шаг один.

+0

Контекстное имя типа - это имя контейнера сущностей в свойствах диаграммы edmx. Если файл edmx находится в другом проекте в решении, добавьте имя проекта, подобное этому MyProject.MyEntities, и если в проекте есть специальное sufixe, например DAL, добавьте его также MyProject.DAL.MyEntities. –

+0

Если я не ошибаюсь, этот ответ хорош для EF4, но не для EF6, к которому относится этот вопрос. –

Смежные вопросы