Код Entity Framework Сначала DbContext Проверяет строку соединения во время компиляции? - PullRequest
5 голосов
/ 29 сентября 2011

Кажется, что Code First DbContext действительно использует данную ConnectionString во время компиляции? Я даже не знаю, как это возможно, но мне кажется, что это так. Если я отключаю свой локальный SQL Server, я получаю сообщение об ошибке «Не удалось получить MetadataWorkspace для типа DbContext ...». При включении SQL Server все компилируется нормально.

Вот часть моего контекста (я использую существующую базу данных и да, я знаю, на самом деле не код сначала)

public class MyContext : DbContext
{
    public MyContext() : base("MY_DYNAMIC_CONNECTIONSTRING")
    {
        Database.SetInitializer<MyContext>(null);
    }
    ...

Если это действительно так, то возникает огромная проблема. Как я могу предотвратить это? Что если я использую отдельные машины сборки, где ConnectionString не работает? Или я что-то не так делаю? Любой совет?

Ответы [ 2 ]

6 голосов
/ 29 сентября 2011

Службы RIA WCF создают экземпляр DbContext во время разработки и сборки, а не только во время выполнения:

Цитата из http://jeffhandley.com/archive/2011/06/30/RIAServicesCodeFirst.aspx:

Чтобы сгенерировать код в своем проекте Silverlight, RIA Services должен проверить ваш DbContext во время сборки, чтобы получить сущность доступные типы.

Цитата из http://varunpuranik.wordpress.com/2011/06/29/wcf-ria-services-support-for-ef-4-1-and-ef-code-first/#comment-102

Разница между автономной работой EF CodeFirst и RIA Services является то, что мы инициализируем новый DbContext также во время разработки.

Если строка соединения недействительна или соединение не может быть установлено, вы, очевидно, получите упомянутое вами исключение.

1 голос
/ 10 ноября 2011

Вот способ, которым я пользуюсь, чтобы отследить основную причину ошибки «Не удалось получить MetadataWorkspace для типа DbContext« {тип} »»:

http://joshmouch.wordpress.com/2011/11/09/failed-to-get-the-metadataworkspace-for-the-dbcontext-type-type/

Я знаю, что он конкретно не отвечает на ваш вопрос, но может помочь другим, кто ищет в Google это сообщение об ошибке.

...