MetadataException: неможливо завантажити вказаний ресурс метаданих


681

Раптом я продовжую отримувати MetadataExceptionінстанціювання мого згенерованого ObjectContextкласу. Рядок підключення в App.Config виглядає правильним - не змінювався з останнього часу роботи - і я намагався регенерувати нову модель (edmx-файл) з базової бази даних без змін.

У когось є якісь ідеї?

Подальші деталі: я не змінив жодних властивостей, я не змінив назву жодних вихідних збірок, я не намагався вбудовувати EDMX у збірку. Я просто чекав 10 годин від виходу з роботи, поки не повернувся. І тоді це вже не працювало.

Я спробував відтворити EDMX. Я спробував відтворити проект. Я навіть намагався відтворити базу даних з нуля. Немає везіння.


14
Якщо питання ТАК про конкретний продукт, який має понад 200 тис. Переглядів, то продукт не працює так, як очікують користувачі. Я хотів би побачити це на адресу Microsoft. Ось посилання, щоб дати їм пропозиції, якщо у вас є час: visualstudio.uservoice.com/forums/121579-visual-studio .
Тоні Л.

Мою проблему вирішили, замінивши рядок з'єднання, скопійований з проекту db-шару.
Хардік

Відповіді:


856

Це означає, що програма не може завантажити EDMX. Це може викликати кілька речей.

  • Можливо, ви змінили властивість MetadataArtifactProcessing моделі на Copy to Output Directory.
  • Рядок підключення може бути неправильним. Я знаю, ви кажете, що ви цього не змінили, але якщо ви змінили інші речі (скажімо, назва збірки), це все одно може бути неправильним.
  • Можливо, ви використовуєте завдання після компіляції, щоб вставити EDMX у збірку, яка з певних причин більше не працює.

Коротше кажучи, насправді недостатньо деталей у вашому запитанні, щоб дати точну відповідь, але, сподіваємось, ці ідеї повинні привести вас на правильний шлях.

Оновлення: я написав повідомлення в блозі з більш повними кроками щодо усунення несправностей .


70
Попри з'єднання, незважаючи на мої зусилля порівняти його з утилітою порівняння вмісту минулого разу, було помилковим.
Дж. Стін

16
Це було і зв'язком для мене. Якщо у вас є інтеграційні тести, які також потребують підключення до власного App.config, під час оновлення edmx речі можуть не синхронізуватися.
Рей

11
Гаразд, я виправив це, просто встановивши "Вставити"; компілюючи, потім повторно скидаючи його на інший. Це вирішило мою проблему.
Шиммі Вайцхандлер

6
Була така ж проблема, спробувала своє рішення, хотіла дати +1, зрозуміла, що я вже робила це в минулому. Я навіть не пам’ятаю, щоб із цим було проблеми;). Цього разу в моєму випадку це було правильне з'єднання рядка в Бібліотеці класів з edmx і неправильне використання веб-додатків при його використанні.
Episodex

9
Дивовижне керівництво. Для мене я скопіював ще один рядок з'єднання, який використовував res: // * / Database.MyModel2 ..., коли я дійсно хотів res: // * / MyModel1 ... (База даних - це папка всередині мого проекту Integration Tests)
emragins

360

Ця маленька зміна допомагає вирішити цю проблему.

У мене є рішення з 3 проекту.

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

перейти

connectionString="metadata=res://*/;

11
Це зафіксував це для мене, але що, до біса, це означає?
Ленс Фішер

18
@ Ленс: Я докладно пояснюю це в цій публікації
Крейг Стунц

4
@jocull: Ні, це не спрацює у багатьох випадках, а в інших буде повільним. Прочитайте мій пост у блозі, щоб зрозуміти, чому.
Крейг Стунц

6
Перемістив мій .edmx у папку Model і забув оновити рядок з'єднання. Великий вказівник. Дякую. Займав би мене години, щоб розібратися.
muruge

11
Ви, пан, врятували бідного працівника Microsoft від дуже розлюченого споживача.
Людина-булочка

115

Ви можете отримати цей виняток, коли Edmx знаходиться в одному проекті, а ви використовуєте його в іншому.

Причина - Res://*/урі, який вказує на ресурси в СУЧАСНІЙ збірці. Якщо Edm визначений в іншій збірці від коду, який його використовує, res: // * / не працюватиме, тому що ресурс неможливо знайти.

Замість того, щоб вказувати "*", вам потрібно надати повне ім'я збірки (включаючи маркер відкритого ключа). Наприклад:

res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...

Кращий спосіб побудувати рядки з'єднання - це за допомогою EntityConnectionStringBuilder:

public static string GetSqlCeConnectionString(string fileName)
{
    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlServerCe.3.5";
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

public static string GetSqlConnectionString(string serverName, string databaseName)
{
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

    providerCs.DataSource = serverName;
    providerCs.InitialCatalog = databaseName;
    providerCs.IntegratedSecurity = true;

    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = providerCs.ToString();

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

Якщо ви все-таки стикаєтеся з винятком, відкрийте збірку у відбивачі та перевірте назви файлів для своїх файлів .csdl, .ssdl та .msl. Коли ресурси мають різні імена до тих, які вказані у значенні метаданих, це не спрацює.


8
Зверніть увагу, що "YourEdmxFileName" має бути кваліфікованим ім'ям, наприклад, "YourNamespace.YourEdmxFileName", якщо ви використовуєте простори імен у своїй збірці. Однак ви повинні видалити частину простору імен, яка дорівнює імені вашої збірки.
Марсель

5
MSDN каже, що другий абзац невірний. "Використовуючи підстановку (*), Entity Framework повинен переглянути всі збори для ресурсів з правильною назвою."
Крейг Стунц

Я майже впевнений, що простір імен не доречний, але вбудований шлях до файлу є. Тож навіть якщо ви перевірите файл * .Designer.cs відповідного файлу edmx і помітите, що автоматично створений простір імен класів - MyCompany ... що завгодно, це не те, що вам слід використовувати. Натомість шлях - це ім'я асемблера, імена папок / рішень / ім'я файлу. Наприклад: "метадані = res: // * / EntityModels. <Ім'я файлу> .csdl |" + "res: // * / EntityModels. <ім'я файла> .ssdl |" + "res: // * / EntityModels. <ім'я файла> .msl;"
Даніель

1
@Daniel, це, як правило, правильно, але зауважте, що простір імен та вбудований шлях до файлу іноді однакові. Ви повинні шукати Reflector (або безкоштовну альтернативу цьому), щоб бути впевненим.
Craig Stuntz

схоже, що це працює, використовуючи лише назву збірки, без версії, publickeytoken тощо. Як:res://MyAssembly/folder.<filename>.csdl...
Іван Феррер Вілла

67

У мене була подібна помилка. Я відтворив проект (довга історія) і витягнув усе зі старого проекту. Я не розумів, що моя модель раніше була в каталозі під назвою "Модель", і тепер знаходиться в каталозі "Моделі". Одного разу я змінив з’єднання в своєму Web.Config з цього:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

до цього:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

Все працювало (змінилось Modelна Models). Зауважте, що мені довелося змінити ці три місця в цьому рядку.


2
Я перемістив модель Entity Framework з Модель у DAL. Але тоді, коли я написав тест (через тиждень) у тестовому проекті, щоб протестувати предикальний будівельник Linq. Я отримав цю помилку. Я виправив тестові проекти App.config з тим, як це виглядало в web.config головного проекту - як ви сказали в трьох місцях. Тож ваш простий відповідь привів мене до шляху.
Патрік Ліндстрьом

Так, спасибі - перевірте свої імена файлів. Якось у мене була стара назва.
PeterX

7
Чи є різниця між двома ?!
Ервін Ройджаккерс

2
@ErwinRooijakkers Модель проти MODELS
Марк

Зрозумів, що я зробив те саме, коли прочитав блог Крейга, але +1 для навчання важливо пам’ятати, що зміни, внесені у вашій бібліотеці класів «сутностей», автоматично не вносяться у файли конфігурацій проектів, на які посилаються. / зітхає Рада, що я не одна.
ruffin

26

І швидкий спосіб перевірити назву моделі без Reflector .... шукайте каталог

... obj / {config output} / edmxResourcesToEmbed

і перевірте, чи існують файли ресурсів .csdl, .msl та .ssdl. Якщо вони знаходяться в підкаталозі, ім’я підкаталогу повинно бути попередньо до імені моделі.

Наприклад, три мої файли ресурсів знаходяться в підкаталозі " Дані" , тому моя рядок з'єднання повинна бути

метадані = res: // * / Data .MyModel.csdl | res: // * / Data .MyModel.ssdl | res: // * / Data .MyModel.msl;

(проти метаданих = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).


Це було ТОЧНО моєю проблемою. На цьому втратили кілька годин. Дякую вам за це просте пояснення
Фернандо Карвальоса

Чудова відповідь, насправді пояснюється, як знайти, яка ваша струна. І показує, що підпапки мають "." як роздільники, а не "\" чи "/".
cjb110

16

У мене також була ця проблема, і це було тому, що stringstring в моєму web.config був дещо іншим, ніж той, який знаходиться в app.config збірки, де знаходиться мій EDMX. Поняття не маю, чому це змінилося, але ось дві різні версії.

App.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Web.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Що було виправлено, це просто скопіювати рядок app.config (зауважте невелику різницю наприкінці - замість " App=EntityFramework" вона хотіла " application name=EntityFramework") в web.config і проблема була вирішена. :)


1
Дякую, це справді була моєю проблемою. У мене був 1 проект, який отримує доступ до БД з EF та ще один проект WCF. Після зміни назви першого проекту, з'єднанняString було змінено в App.config мого першого проекту. Тож мені довелося змінити з'єднанняСтринг у проекті WCF також в web.config :)
Volkan

З документації MSDN про docs.microsoft.com/en-us/dotnet/framework/data/adonet/… : 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 не поділяють цю гнучкість, тому ви повинні використовувати лише ті ключові слова, які вона очікує.
Suncat2000

13

Це трапилося зі мною, коли я випадково переключив дію збірки файлу edmx (відображається у розділі Властивості в IDE) з 'EntityDeploy' на 'None'. EntityDeploy - це те, що заповнює метадані для вас: див. Http://msdn.microsoft.com/en-us/library/cc982037.aspx


Це було моїм виправленням - я перейменував свій edmx у .old, коли я його скопіював і намагався виправити кілька речей, після чого, коли я перейменував його назад, Build Action встановив його самостійно, і таким чином отримав цю помилку, повернувши її до EntityDeploy вирішено мій випуск :)
eth0

Я перемістив свій файл EDMX в іншу папку і повинен був змінити дію збирання, щоб оновити вбудовані ресурси також оновлено. Дякую!
Девід

Це було рішенням для мене; Я втратив це налаштування в процесі оновлення до .NET Standard. Дякую, що зберегли мою розум!
NetherGranite

11

Це трапляється зі мною, коли я не очищаю рішення перед тим, як створити нового дизайнера .edmx. Тому просто не забудьте очистити рішення перед тим, як створити нового дизайнера .edmx. Це допомагає мені пропустити набагато більше проблем із цим. Нижче наведено навігаційні деталі, якщо ви не новачок у візуальній студії.

Клацніть-> Збірка-> Чисте рішення

Потім натисніть клавішу-> Збірка-> Відновити рішення

Сподіваюсь, це допомагає. Дякую всім


8

Я щойно провів з цим щасливі 30 хвилин. Я б перейменував об'єкт сутностей, перейменував запис у конфігураційний файл, але є ще ... ви також повинні змінити посилання на csdl

дуже легко пропустити - якщо ви перейменовуєте, переконайтесь, що ви все отримаєте ….


6

У мене була така ж проблема. Я заглянув у свій виконаний dll з рефлектором і побачив, що назва ресурсу невірна. Я перейменований, і це зараз добре виглядає.


6

У моєму випадку це вирішується шляхом зміни властивостей файлу edmx.

  1. Відкрийте файл edmx
  2. Клацніть правою кнопкою миші на будь-якому місці дизайнера EDMX
  3. вибрати властивості
  4. оновіть властивість під назвою "Обробка артефактів метаданих" до "Вставити у вихідну збірку"

це вирішило проблему для мене. Проблема полягає в тому, що коли контейнер намагається знайти метадані, він не може його знайти. тому просто зробіть це в одній збірці. це рішення не працюватиме, якщо у вас є файли edmx в іншій збірці


+1,000,000 це було основним питанням для мене сьогодні. Біль при реорганізації просторів назв продуктів і консолідації вузлів.
Майк

6

Я витратив цілий день на цю помилку

якщо ви працюєте n-tear architecture

або ви намагалися separate Modelsстворити EDMXформу DataAccessLayer доDomainModelLayer

можливо, ви отримаєте цю помилку

  1. Перший крок усунення несправностей - переконатися в тому, що рядок підключення є webconfig (UILayer)і appconfig (DataAccessLayer)є однаковою
  2. Друге, що дуже важливо connection string

    connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....

    в чому проблема

звідки я потрапив Modelабо що-небудь .csdl у моєму рядку з'єднання, де вони

ось я наше рішення дивлюся на картинку

введіть тут опис зображення

сподіваюсь, що допоможе вам


5

Мені вдалося вирішити це в Visual Studio 2010, VB.net (ASP.NET) 4.0.

Під час майстра моделі сутності ви зможете побачити рядок з'єднання сутності. Звідти ви можете скопіювати та вставити у рядок з'єднання.

Єдине, чого мені не вистачало, це "App_Code". у рядку з'єднань.

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"

На жаль, з'єднувальна рядок у майстрі не є правильним для app.config. @leqid запропонував хороший спосіб виправити шлях до моделі.
Der_Meister

5

Після годин гуглінгу та спроб вирішити жодне із запропонованих рішень не спрацювало. Я перерахував тут кілька рішень. Я також зазначив той, який працював на мене. (Я використовував EF версії 6.1.1 та SQL сервер 2014 - але більш старий БД)

  1. Відновіть проект і повторіть спробу.
  2. Закрийте та відкрийте VS - я не знаю, як це працює
  3. переконайтесь, що ви розмістили .EDMX файл у каталозі, переконайтеся, що ви включили каталоги у свою ConnectionString. наприклад, моя знаходиться в папці DAL. Так це виглядає приблизно так: connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;(це файли. Щоб побачити їх, ви можете переключити Показати всі файли в провіднику рішень, в каталозі ~ / obj / ..)

... і багато іншого, що я спробував [як: повернення версії EntityFramework до більш пізньої версії (не впевнений у цьому)]


що працювало для мене:

з цієї статті тут , це допомогло мені вирішити свою проблему. Я щойно змінив своє ProviderManifestToken="2012"значення ProviderManifestToken="2008"у файлі EDMX. Зробити це:

Провідник рішень

  1. Клацніть правою кнопкою миші на файл .edmx
  2. Відкрити з ..
  3. Редактор XML
  4. Змінити ProviderManifestToken = "XXXX" з 2008 року

Я сподіваюся, що це допомагає.


Нещодавно у мене виникла ця проблема після внесення змін, здавалося б, ніяких. Спробував перезапустити VS безрезультатно, але потім це було виправлено очищенням та відновленням. Отже, для інших, якщо ви не внесли жодних змін і нічого з цього не здається актуальним, спробуйте чистити / перебудувати.
Грег

5

Якщо ви використовуєте edmx для іншого проекту, то в рядку підключення змініть ...

metadata=res://*/Data.DataModel.csdl

... до ...

metadata=res://*/DataModel.csdl

Це правда. Якщо ви хочете перемістити його у нову підпапку проекту, вам потрібно додати її folder.subfolderдо цього.
qakmak

Дякую, це рішення спрацювало для мене. Я перемістив файл .edmx з dir в одному проекті, до кореня іншого проекту, і мені потрібно було видалити ім’я dir з усіх рядків з'єднання в моєму рішенні.
Кріс

4

Кінцевим рішенням (навіть після відтворення бази даних на двох інших машинах, а також EDMX та інших постачальників) було не використовувати перше видання Entity Framework. З нетерпінням чекаю, що його ще раз оцінюють у .NET 4.0.

Після запуску в ту ж проблему знову і пошук у всіх для відповіді, я нарешті -то знайшов кого - то , хто б мав таку ж проблему. Здається, що майстер Visual Studio не був правильно створений рядок з'єднання, і у посиланні на ресурси метаданих відсутній важливий шлях.

v1.0 BUG ?: Не вдається завантажити вказаний ресурс метаданих. Сценарії! = Моделі

Оновлення 2013-01-16 : Перейшовши на майже виключно за допомогою практик використання коду EF First (навіть із існуючими базами даних), ця проблема вже не є проблемою. Для мене це було життєздатним рішенням для зменшення безладу від автоматично створеного коду та конфігурації та посилення мого власного контролю над продуктом.


4

У моїй проблемі та вирішенні, симптоми були однаковими "Не вдається завантажити вказаний ресурс метаданих", але першопричина була іншою. У мене було 2 проекти у вирішенні: один - EntityModel, а другий - рішення. Я фактично видалив і відтворив файл EDMX в EntityModel.

Рішення полягало в тому, що мені довелося повернутися до проекту веб-додатків і додати цей рядок у конфігураційний файл. Нова модель змінила кілька елементів, які потрібно було дублювати у файлі Web.Config "іншого" проекту. Стара конфігурація вже не була хорошою.

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

4

Іноді я бачу цю помилку в своєму проекті. Я вирішую це шляхом

1 - Клацніть правою кнопкою миші на файл EDMX

2 - Виберіть Run Custom Toolопцію

3 - Проект відновлення


Це працювало для мене, але мені також довелося після цього відновитись
rdans

3

У моєму випадку ця проблема стосувалася перейменування файлу edmx моєї моделі ... виправлення рядка з'єднання app.config для файлів csdl / ssdl / msl виправило мою проблему.

Якщо ви використовуєте конструктор EF 4.0 для створення вашого csdl / ssdl / msl, ці 3 "файли" фактично будуть зберігатися в головному файлі edmx моделі. У цьому випадку публікація Waqas в значній мірі відмічена. Важливо розуміти, що "Model_Name" у його прикладі потрібно буде змінити на будь-яку поточну назву файлу .edmx вашої моделі (без .edmx).

Крім того, якщо ваш файл edmx не знаходиться на кореневому рівні вашого проекту, вам потрібно попередньо ввести Model_Name з відносним шляхом, наприклад

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

вказує, що csdl / ssdl / msl xml зберігається у файлі моделі 'WidgetModel.edmx', який зберігається у папці під назвою 'MyModel'.


3

Я написав цей допоміжний клас для створення примірників об'єктів ObjectContext, коли вони визначені в іншому проекті, ніж проект, що використовує його. Я розбираю рядок з'єднання у конфігураційному файлі та замінюю '*' повним іменем збірки.

Це не ідеально, оскільки він використовує рефлексію для побудови об'єкта, але це найбільш загальний спосіб зробити це, який я міг знайти.

Сподіваюся, це комусь допоможе.

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}

3

SelftrackingEntitiesЯкщо ви користуєтеся всіма користувачами, якщо ви дотримувались проходження програми Microsoft і розділили контекстний клас Object на проект послуги wcf (посилаючись на контекст .tt), тож ця відповідь для вас:

частина показаних відповідей у ​​цій публікації, яка включає в себе такий код:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

НЕ ПРАЦЮЄМО ДЛЯ ВАС !! Причина в тому, що YourObjectContextType.Assemblyзараз проживає в іншій асамблеї (всередині проекту wcf),

Тож вам слід замінити YourObjectContextType.Assembly.FullName на ->

ClassTypeThatResidesInEdmProject.Assembly.FullName 

весело провести час.


2

У мене були проблеми з цим самим повідомленням про помилку. Мою проблему було вирішено закриттям та повторним відкриттям Visual Studio 2010.


2

Мав те саме питання, тому що я перейменував збори.

Мені довелося також перейменувати його в атрибути AssemblyTitle і AssemblyProduct у проекті Properties / AssemblyInfo.cs, а також видалити та повторно додати посилання на файл edmx.

Тоді це спрацювало чудово.


2

З такою ж проблемою я знову створив edmx з Database. Вирішує мою проблему.


2
На жаль, це вирішує і лікує симптом, а не причину.
Кларіс Бувер

2

Виняток полягає в тому, що компілятор вказує на неіснуючі метадані, тому просто Копіюйте app.config stringstring в Web.configConnectionString


1

У мене також були ті ж проблеми та рішення, що й у Ріка, за винятком того, що я імпортував існуючий .edmx до нового проекту, і хоча базовий простір імен не мав значення, він був імпортований в інший підкаталог, тому мені також довелося оновити з'єднання рядок всередині Web.Config у трьох місцях, щоб включити різні імена підкаталогів:


1

У мене була така ж проблема з рішенням, яке містило проекти в папці рішення, коли вони були переміщені до кореня рішення (щоб подолати підозрювану помилку з Mvc3AppConverter через місця розташування проекту).

Хоча рішення, складені після всіх посилань на проект *, були додані в міру необхідності, помилка була скинута, коли веб-сайт був запущений.

EDMX є в одному з проектів, який було переміщено (проект "Дані"), але, звичайно, відсутність посилання на проект "Дані" не спричинило помилку компіляції, а лише помилку під час виконання.

Просто додавання відсутньої посилання до основного проекту вирішило цю проблему, взагалі не потрібно редагувати з'єднання.

Я сподіваюся, що це допомагає комусь іншому.


1

Щодо мене, я розділив рівень доступу до даних та рівень інтерфейсу користувача. Тож у мене є рядок з'єднання сутності для кожного шару.

Перш ніж змінити ці дві окремі рядки з'єднання на однакові, я все-таки виявив, що нижче помилка.

Unable to load the specified metadata resource

Тому я змушую бути однаковими рядками з'єднання для цих двох шарів (DAL, UI), це працює ідеально.

Моє рішення - зробити так, щоб усі рядки з'єднання були однаковими незалежно від того, де вони вже представлені .


1

У мене вчора була ця проблема, і я переглядав свій код у налагодженні та вихід із SQL Profiler.

Що я не міг зрозуміти, перш ніж прочитати та зрозуміти цю публікацію, було те, чому EntityFramework кидав цю помилку під час виклику БД. Я переглядав сотні рядків у SQL Profiler, намагаючись розібратися, що не так з моделлю бази даних. Я не міг знайти нічого подібного до дзвінка, якого я очікував, і якщо чесно, я не був певний, що шукав.

Якщо ви перебуваєте в цьому положенні, перевірте рядок з'єднання. Я здогадуюсь, що перш ніж EntityFramework створить свій SQL, він перевірить модель, вказану в частині метаданих частини рядка з'єднання. У моєму випадку це було неправильно. EntityFramework навіть не встигав зайти до БД.

Переконайтесь, що імена правильні. Як тільки я це розібрав, я бачив дзвінки в SQL Profiler, де ApplicationName був "EntityFramework" з SQL, викликаючи очікувані таблиці.


1

Поганий файл app.config або web.config може це зробити. Я скопіював рядок підключення app.config до свого web.config у мій інтерфейс користувача і закінчив введення:

<connectionStrings>
    <connectionStrings>
          <add name="name" connectionString="normalDetails"/>
    </connectionStrings>
</connectionStrings>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.