Внезапно я продолжаю получать информацию MetadataException
о создании своего сгенерированного ObjectContext
класса. Строка подключения в App.Config выглядит правильно - не изменилась с тех пор, как работала в прошлый раз, - и я попытался восстановить новую модель (файл edmx) из базовой базы данных без изменений.
У кого-нибудь есть идеи?
Дополнительные сведения: я не изменил никаких свойств, я не изменил имя каких-либо выходных сборок, я не пытался встроить EDMX в сборку. Я просто ждал 10 часов с момента ухода с работы, пока не вернулся. И тогда это больше не работало.
Я пытался воссоздать EDMX. Я пытался воссоздать проект. Я даже пытался воссоздать базу данных с нуля. Не повезло вообще.
c#
.net
entity-framework
ado.net
Дж. Стин
источник
источник
Ответы:
Это означает, что приложение не может загрузить EDMX. Есть несколько вещей, которые могут вызвать это.
Короче говоря, в вашем вопросе недостаточно подробностей, чтобы дать точный ответ, но, надеюсь, эти идеи помогут вам выбрать правильный путь.
Обновление: я написал сообщение в блоге с более полными шагами для устранения проблем .
источник
Это небольшое изменение поможет с этой проблемой.
У меня есть решение с 3 проекта.
изменить на
источник
Вы можете получить это исключение, когда Edmx находится в одном проекте, а вы используете его из другого.
Причина в
Res://*/
том, что URI указывает на ресурсы в текущей сборке. Если Edm определен в сборке, отличной от кода, который его использует, res: // * / не будет работать, поскольку ресурс не найден.Вместо указания '*' вам нужно указать полное имя сборки (включая маркер открытого ключа). Например:
Лучший способ создать строки подключения с EntityConnectionStringBuilder:
Если вы все еще сталкиваетесь с исключением, откройте сборку в отражателе и проверьте имена файлов для ваших файлов .csdl, .ssdl и .msl. Когда ресурсы имеют имена, отличные от тех, которые указаны в значении метаданных, это не сработает.
источник
res://MyAssembly/folder.<filename>.csdl...
У меня была похожая ошибка. Я воссоздал проект (длинная история) и вытащил все из старого проекта. Я не осознавал, что моя модель раньше находилась в каталоге с именем «Модель», а теперь была в каталоге «Модели». Как только я изменил соединение в моем Web.Config из этого:
к этому:
Все работало (изменилось
Model
наModels
). Обратите внимание, что мне пришлось изменить это три места в этой строке.источник
И быстрый способ проверить название модели без Reflector .... поищите каталог
и проверьте наличие файлов ресурсов .csdl, .msl и .ssdl. Если они находятся в подкаталоге, к имени подкаталога необходимо добавить имя модели.
Например, мои три файла ресурсов находятся в подкаталоге Data , поэтому моя строка подключения должна была быть
(против метаданных = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).
источник
У меня также была эта проблема, и это было потому, что строка подключения в моем web.config немного отличалась от строки в app.config сборки, где находится мой EDMX. Не знаю, почему это изменилось, но вот две разные версии.
App.config:
Web.config:
Что было исправлено, так это простое копирование строки app.config (обратите внимание на небольшую разницу в конце - вместо "
App=EntityFramework
" хотелapplication name=EntityFramework
") в web.config, и проблема была решена. :)источник
The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.
строки подключения Entity Framework не обладают такой гибкостью, поэтому вы должны использовать только те ключевые слова, которые ожидаются.Это случилось со мной, когда я случайно переключил действие по сборке файла edmx (отображается в разделе «Свойства» в среде IDE) с «EntityDeploy» на «None». EntityDeploy - это то, что заполняет метаданные для вас: см. Http://msdn.microsoft.com/en-us/library/cc982037.aspx
источник
Это происходит со мной, когда я не очищаю решение перед сборкой нового дизайнера .edmx. Так что просто не забудьте очистить решение, прежде чем создавать новый дизайнер .edmx. Это помогает мне пропустить больше проблем с этим. Ниже представлены детали навигации, если вы новичок в Visual Studio.
Надеюсь это поможет. Спасибо всем
источник
Я только что провел 30 минут с этим. Я переименовал объект entity, переименовал запись в файле конфигурации, но есть еще кое-что ... вы должны также изменить ссылку на csdl
очень легко пропустить - если вы переименовываете, убедитесь, что вы получите все ....
источник
У меня такая же проблема. Я заглянул в свою соблюдаемую dll с рефлектором и увидел, что название ресурса было неправильным. Я переименовал и теперь выглядит хорошо.
источник
Для моего случая это решается изменением свойств файла edmx.
это решило проблему для меня. Проблема в том, что когда контейнер пытается найти метаданные, он не может его найти. так просто сделайте это в той же сборке. это решение не будет работать, если у вас есть файлы edmx в другой сборке
источник
Я потратил целый день на эту ошибку
если вы работаете с
n-tear architecture
или вы пытались
separate Models
сгенерироватьEDMX
форму DataAccessLayer дляDomainModelLayer
может быть, вы получите эту ошибку
webconfig (UILayer)
иappconfig (DataAccessLayer)
совпадаютВторое, что очень важно,
connection string
в чем проблема
откуда я взял
Model
или что .csdl в строке подключения, где онивот я наше решение посмотри на картинку
надеюсь, что помощь вам
источник
Мне удалось решить эту проблему в Visual Studio 2010, VB.net (ASP.NET) 4.0.
Во время работы мастера модели сущностей вы сможете увидеть строку подключения сущности. Оттуда вы можете скопировать и вставить в строку подключения.
Единственное, чего мне не хватало, это App_Code. в строке соединений.
источник
После нескольких часов поисков и поисков решений ни одно из предложенных решений не сработало. Я перечислил несколько решений здесь. Я также отметил тот, который работал для меня. (Я использовал EF версии 6.1.1 и SQL Server 2014 - но более старую БД)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
(это файлы. Чтобы увидеть их, вы можете переключить Показать все файлы в обозревателе решений в каталоге ~ / obj / ..)... и многие другие, которые я пробовал [например: возврат версии EntityFramework к более поздней версии (не уверен в этом)]
что сработало для меня:
из этой статьи , это помогло мне решить мою проблему. Я просто изменил свой
ProviderManifestToken="2012"
вProviderManifestToken="2008"
в файле EDMX. Сделать это:Обозреватель решений
Надеюсь, это поможет.
источник
Если вы используете edmx из другого проекта, то в строке подключения измените ...
... до ...
источник
folder.subfolder
перед ним.Окончательное решение (даже после воссоздания базы данных на двух других машинах, а также EDMX и других различных приложений) заключалось в том, чтобы не использовать первую редакцию Entity Framework. С нетерпением жду возможности оценить его снова в .NET 4.0.После запуска в ту же проблему снова и поиск во всех для ответа, я наконец -то нашел кого - то , кто бы имел такую же проблему. Похоже, что строка подключения не была правильно сгенерирована мастером Visual Studio, а в ссылке на ресурсы метаданных пропущен важный путь.
v1.0 BUG ?: Невозможно загрузить указанный ресурс метаданных. Скрипты! = Модели
Обновление 2013-01-16 : после почти полного использования методов EF Code First (даже с существующими базами данных) эта проблема больше не является проблемой. Для меня это было жизнеспособным решением - избавиться от беспорядка, создаваемого автоматически сгенерированным кодом и конфигурацией, и повысить собственный контроль над продуктом.
источник
Моя проблема и решение, симптомы были такими же: «Невозможно загрузить указанный ресурс метаданных», но основная причина была другой. У меня было 2 проекта в решении, один был EntityModel, а другой решение. Я фактически удалил и заново создал файл EDMX в EntityModel.
Решение состояло в том, что мне пришлось вернуться к проекту веб-приложения и добавить эту строку в файл конфигурации. Новая модель изменила несколько элементов, которые должны были дублироваться в файле Web.Config «другого» проекта. Старая конфигурация больше не была хороша.
источник
Иногда я вижу эту ошибку в моем проекте. Я решаю это
1 - Щелкните правой кнопкой мыши на файле EDMX
2 - Выберите
Run Custom Tool
опцию3 - Перестроить проект
источник
В моем случае эта проблема была связана с переименованием файла edmx моей модели ... исправление строки подключения app.config для файлов csdl / ssdl / msl устранило мою проблему.
Если вы используете конструктор EF 4.0 для создания ваших csdl / ssdl / msl, эти 3 «файла» будут фактически сохранены в основном файле edmx модели. В этом случае пост Вакаса в значительной степени находится на отметке. Важно понимать, что «Model_Name» в его примере нужно будет изменить на любое текущее имя файла .edmx вашей модели (без .edmx).
Кроме того, если ваш файл edmx не находится на корневом уровне вашего проекта, вам необходимо предвосхитить Model_Name с относительным путем, например
указал бы, что csdl / ssdl / msl xml хранится в файле модели «WidgetModel.edmx», который хранится в папке с именем «MyModel».
источник
Я написал этот вспомогательный класс для создания экземпляров объектов ObjectContext, когда они определены в другом проекте, чем проект, использующий его. Я анализирую строку подключения в файле конфигурации и заменяю '*' на полное имя сборки.
Он не идеален, потому что он использует отражение для построения объекта, но это самый общий способ сделать это, который я мог найти.
Надеюсь, это кому-нибудь поможет.
источник
Для всех вас,
SelftrackingEntities
пользователей, если вы выполнили пошаговое руководство Microsoft и разделили класс контекста Object на проект службы wcf (путем ссылки на контекст .tt), так что этот ответ для вас:часть показанных ответов в этом посте, которая включает в себя такой код:
НЕ РАБОТАЕТ ДЛЯ ВАС !! причина в том, что
YourObjectContextType.Assembly
теперь находится в другом Assembley (внутри сборки проекта wcf),Так что вы должны заменить
YourObjectContextType.Assembly.FullName
на ->радоваться, веселиться.
источник
У меня были проблемы с этим же сообщением об ошибке. Моя проблема была решена путем закрытия и повторного открытия Visual Studio 2010.
источник
Была такая же проблема, потому что я переименовал сборку.
Мне также пришлось переименовать его в атрибутах AssemblyTitle и AssemblyProduct в проекте Properties / AssemblyInfo.cs, а также удалить и повторно добавить ссылку на файл edmx.
Тогда это работало просто отлично.
источник
Имея ту же проблему, я заново создал EDMX из базы данных. Решает мою проблему.
источник
Исключением является то, что компилятор указывает на несуществующие метаданные, поэтому просто скопируйте строку
app.config
подключения вWeb.config
ConnectionStringисточник
У меня также была та же проблема и решение, что и у Рика, за исключением того, что я импортировал существующий .edmx в новый проект, и хотя базовое пространство имен не имело значения, оно было импортировано в другой подкаталог, поэтому мне также пришлось обновить соединение строка внутри Web.Config в трех местах, чтобы включить различные имена подкаталогов:
источник
У меня была такая же проблема с решением, которое содержало проекты в папке решений, когда они были перемещены в корень решения (чтобы устранить подозрительную ошибку в Mvc3AppConverter из-за расположения проектов).
Хотя решение было скомпилировано после того, как все * ссылки на проекты были добавлены по мере необходимости, ошибка возникла при запуске сайта.
EDMX находится в одном из проектов, который был перемещен (проект «Данные»), но, конечно, отсутствие ссылки на проект данных не привело к ошибке компиляции, просто к ошибке во время выполнения.
Простое добавление отсутствующей ссылки в основной проект решило эту проблему, и вообще не нужно редактировать соединение.
Я надеюсь, что это помогает кому-то еще.
источник
Что касается меня, я разделил уровень доступа к данным и уровень интерфейса пользователя. Так что у меня есть строка подключения объекта для каждого слоя.
Прежде чем я изменю эти две отдельные строки подключения, чтобы они были одинаковыми, я все же обнаружил, что ошибка ниже.
Поэтому я делаю одинаковые строки подключения для этих двух слоев (DAL, UI), он отлично работает.
Мое решение состоит в том, чтобы сделать все строки подключения одинаковыми, независимо от того, где они уже представлены .
источник
У меня была эта проблема вчера, и я искал мой код в отладке и вывод из SQL Profiler.
Прежде чем я прочитал и понял этот пост, я не мог понять, почему EntityFramework выдавал эту ошибку при вызове БД. Я просматривал сотни строк в SQL Profiler, пытаясь понять, что не так с моделью базы данных. Я не мог найти ничего похожего на звонок, который ожидал, и, честно говоря, я не был уверен, что искал.
Если вы находитесь в этом положении, проверьте строку подключения. Я предполагаю, что прежде чем EntityFramework создаст свой SQL, он проверит модель, указанную в части метаданных строки соединения. В моем случае это было неправильно. EntityFramework даже не доходил до БД.
Убедитесь, что имена верны. После того, как я с этим разобрался, я увидел вызовы в SQL Profiler, где ApplicationName был 'EntityFramework', где SQL вызывал ожидаемые таблицы.
источник
Плохой файл app.config или web.config может сделать это .. Я скопировал строку подключения app.config в мой web.config в моем пользовательском интерфейсе и в итоге ввел:
источник