Вызов неоднозначен между следующими методами или свойствами: 'EntitiesLan.EntitiesLan()' и 'EntitiesLan.EntitiesLan()'

У меня есть следующий код, и я не знаю, почему возникает эта ошибка.

 using (var context = new EntitiesPlesk())
       {
             /////Some Code
       } 

using (var context = new EntitiesLan())   // Error Line
       {
             /////Some Code
       } 

Я использую файл .sdf Database для модели edmx (EntitiesLan). Пожалуйста, помогите мне, где я должен изменить, чтобы избавиться от этой ошибки.... Спасибо!


person ARC    schedule 03.10.2015    source источник
comment
С данным кодом не видно, где двусмысленность. Куда вы попадаете, когда нажимаете F12 в Visual Studio (перейти к определению)? Обычно в нем перечислены все возможные случаи.   -  person Andreas H.    schedule 03.10.2015
comment
@АндреасХ. да, это идет к его определению: открытый частичный класс RshotelEntitiesLan: DbContext { public RshotelEntitiesLan() : base(name=RshotelEntitiesLan) {}   -  person ARC    schedule 03.10.2015
comment
@АндреасХ. помните, что я связал эту модель edmx с файлом базы данных .sdf   -  person ARC    schedule 03.10.2015
comment
Поскольку это частичный класс, вы убедились, что нет дальнейшего определения конструктора? Может в другом файле? Что произойдет, если вы закомментируете или измените найденный конструктор? Это должно привести вас ко «второй части» двусмысленности.   -  person Andreas H.    schedule 03.10.2015


Ответы (1)


Проблема не в вашем коде, проблема на самом деле в том, что вы пытаетесь восстановить свой edmx в более высокой версии EntityFramework. Возможно, вы могли бы изменить свой старый проект VS2010 в VS2013.

В предыдущей версии Entity Framework модель, созданная с помощью EF Designer, создавала контекст, производный от ObjectContext, и классы сущностей, производные от EntityObject.

Начиная с EF4.1, мы рекомендуем переключиться на шаблон генерации кода, который создает контекст, производный от классов сущностей DbContext и POCO.

В Visual Studio 2012 вы получаете код DbContext, сгенерированный по умолчанию для всех новых моделей, созданных с помощью EF Designer. Существующие модели будут продолжать генерировать код на основе ObjectContext, если только вы не решите переключиться на генератор кода на основе DbContext.

Источник: MSDN

Решение

Сергей Березовский описал решение следующим образом: ЭТО сообщение SO.

Вы должны либо использовать стратегию генерации кода None для вашего файла .edmx. Или удалите шаблоны MainModel.tt и MainModel.Context.tt, которые генерируют объекты модели и контекст.

Если вы используете стратегию генерации кода по умолчанию, то сущности и контекст будут сгенерированы в файл MainModel.Designer.cs. Это будут стандартные сущности, унаследованные от EntityObject, контекст будет унаследован от ObjectContext. С Entity Framework 5 у нас есть генерация POCO сущностей. И вся генерация выполняется в T4 шаблонах, которые генерируют контекст, унаследованный от DbContext, и POCO сущностей без какого-либо базового типа (ну, только объект).

Если у вас есть оба шаблона и включена генерация кода в дизайнере edmx, будут созданы два набора сущностей. Вот почему у вас конфликт имен.

Вы можете найти ЭТО ТАК пост полезен для того, чтобы прояснить ваше понимание и решение этой проблемы.

person Zeeshan    schedule 03.10.2015