Отображение типа CLR типа EDM неоднозначно с EF 6 и 5?

Пожалуйста, кто-нибудь может помочь мне исправить эту ошибку?

Указанная схема недействительна. Ошибки:

Отображение типа CLR типа EDM неоднозначно, поскольку несколько типов CLR соответствуют типу EDM ‘City_DAL’. Ранее найденный тип CLR «CeossDAL.City_DAL», новый тип CLR «CeossBLL.City_DAL».

Основная проблема в том, что у меня есть DAL, и это содержит EF и BLL, и это содержит те же classы DAL, но отличается в пространстве имен, и это то, что вызывает проблему

Я не знаю, как избавиться от этой проблемы, можете ли вы мне помочь?

Также я буду признателен, если кто-нибудь даст мне образец для использования n-уровневой архитектуры с EF

спасибо

Не используйте classы с одинаковым неквалифицированным именем. EF использует только имена classов для идентификации типа, отображаемого в EDMX (пространства имен игнорируются) – это соглашение, позволяющее отображать classы из разных пространств имен в одну модель. Решение вашей проблемы – это назвать ваши classы в BLL по-разному.

Обход проблемы: измените свойство на одном из двух одинаковых classов.

EF соответствует свойствам classа и classа. Поэтому я просто изменил имя свойства на одном из объектов EF, и ошибка исчезла.

Поскольку @Entrodus прокомментировал один из других ответов:

EF-конфликт происходит только тогда, когда два classа имеют одинаковое имя и один и тот же набор параметров.

Этот вопрос форума MSDN может оказаться полезным. Это предполагает размещение classов BLL и DAL в отдельных assemblyх.

Для EF 6.x я нашел некоторые заметки в https://github.com/aspnet/EntityFramework/issues/941 и исправил это в своем решении, добавив аннотацию к типу EDM.

Я отредактировал файл EDMX вручную и изменил строку следующим образом:

 

к этому:

  

или использовать это, если у вас есть существующий тип в другом месте:

  

где EntityModel – это пространство имен, используемое для моей модели EF, а MyApp – пространство имен бизнес-объекта

В некоторых случаях это скорее симптом, чем реальная проблема. Для меня он обычно появляется, когда я пытаюсь вызвать функцию внутри запроса Linq, не вызывая сначала .ToList ().

Например, ошибка, которая привела меня сюда, была вызвана тем, что я сделал это:

 var vehicles = DB.Vehicles.Select(x => new QuickSearchResult() { BodyText = x.Make + " " + x.Model + "
" + "VIN: " + x.VIN + "
" + "Reg: " + x.RegistrationNumber +"
" + x.AdditionalInfo type = QuickSearchResultType.Vehicle,//HERE. Can't use an enum in an IQueryable. UniqueId = x.VehicleID });

Мне пришлось вызвать .ToList (), затем перебрать каждый элемент и присвоить ему тип.

Возможно, это было недоступно, когда вопрос был задан, но другое решение – удалить EDMX и воссоздать его как модель данных сущности кода. В EF6 с кодовым первым вы можете сопоставить два classа с тем же именем из разных пространств имен моделей, не создавая конфликта.

Чтобы создать модель данных сущности в Visual Studio (2013), перейдите в «Добавить»> «Новый элемент …»> «Модель данных сущности ADO.NET». Обязательно выберите опцию «Первый код из базы данных».

Еще одна причина, по которой вы можете получить эту ошибку: если вы загружаете сборные сборки с помощью Assembly.LoadFile, у которых есть файлы edmx, которые уже загружены в память. Это создает повторяющиеся classы, которые не подходят инфраструктуре сущностей.

Я получил ошибку выше, потому что для обеих строк подключения у меня было то же значение для метаданных, указанных в файле конфигурации моего основного проекта, как показано ниже:

   

Я закончил копирование правильной строки подключения из файла конфигурации проекта EntitiesB.

Для меня это было потому, что я пытался получить доступ к типу с тем же именем в неправильном экземпляре контекста.

Предположим, что у ContextA и ContextB есть SomeType . Я пытался получить доступ к ContextA.SomeType в экземпляре ContextB .

Просто добавьте EntityFramework как «Код сначала из базы данных», а не как «EF Designer из базы данных». Это разрешило мою проблему, но у нее темная сторона, если вы изменили свою базу данных, вам нужно удалить все classы и добавить ее снова или просто отредактировать classы, я использую последнее, когда меняю свойства столбцов, например «Позволяет null “или размер строки. Но если добавить столбцы, я рекомендую удалить и снова добавить classы.

Существует библиотека под названием AutoMapper, которую вы можете скачать. Это помогает вам определять сопоставления classов из одного типа в другой.

 Mapper.CreateMap(); Mapper.CreateMap(); 
  • Не удалось выполнить проверку для одного или нескольких объектов. Дополнительную информацию см. В разделе «Свойство EntityValidationErrors».
  • Entity Framework 4 выборочно ленивые свойства загрузки
  • Entity Framework Code First Fluent Api: добавление индексов в столбцы
  • Создание динамических запросов с инфраструктурой сущностей
  • Entity Framework - добавить свойство навигации вручную
  • Использование Entity Framework с частной компактной установкой SQL Compact
  • Как преобразовать DbSet в инфраструктуру Entity в ObjectQuery
  • Использование MySql с Entity Framework 4 и Code-First Development CTP
  • Код элемента Entity Framework Первый метод AddOrUpdate insert Дублирующие значения
  • LEFT JOIN в LINQ для объектов?
  • Entity Framework объединяет 3 таблицы
  • Давайте будем гением компьютера.