доступ к классам EF из библиотеки классов - как именно настроить / проверить строку подключения в клиенте? (получение ошибок)

Я очень запутался в том, как вызывать мои классы EF в библиотеке классов из клиентского проекта, который у меня есть? Все работало нормально, когда они работали в одном проекте. Теперь я получаю такие ошибки, как «Невозможно загрузить указанный ресурс метаданных».

Я видел различные идеи / предложения относительно того, как исправить строку подключения (например, создать App.config в своем клиентском проекте и скопировать конфигурацию строки подключения из библиотеки классов, что-то об изменении настроек подключения для копирования на вывод и т. Д.)

ВОПРОС - Может ли кто-нибудь предоставить надежный способ получить доступ к классу EF из отдельного работающего проекта? (т.е. как каким-то образом получить правильную информацию о подключении к клиенту)

Благодарность


person Greg    schedule 30.04.2010    source источник
comment
Вы пробовали metadata=res://*/?   -  person Craig Stuntz    schedule 30.04.2010
comment
нет - ты про всю строку?   -  person Greg    schedule 01.05.2010
comment
Вы когда-нибудь получали повторяемое решение этой проблемы?   -  person Mark Cooper    schedule 03.05.2011


Ответы (1)


Это сработало для меня: создайте частичный класс для вашего сгенерированного класса сущностей и добавьте эти фабричные методы:

public partial class DbEntities : DbContext
{
    private DbEntities(string connectionString)
        : base(connectionString)
    {
    }
    public static DbEntities CreateContext()
    {
        return new DbEntities("connection string copied from app.config");
    }
}

Когда вам нужно подключиться к Db, используйте DbEntities.CreateContext (). "new DbEntities ()" не будет работать, потому что он попытается прочитать строку подключения из файла конфигурации.

Вы можете удалить конструктор по умолчанию «DbEntities ()» из сгенерированного файла или отредактировать сгенерированный файл и поместить строку подключения вместо «name = DbEntities»:

public DbEntities() : base("name=DbEntities") { }

но этот файл будет воссоздан при обновлении модели БД.

person Ondra    schedule 10.10.2012