Entity Framework, DLL, Excel

3

Я написал dll в С#, который используется Excel (DLL зарегистрирован COM). У меня нет проблем с подключением к Excel. Dll извлекает данные из базы данных SQL Server с использованием Entity Framework 5. Если я запускаю DLL через консольное приложение, DLL отлично работает. Но когда я запускаю его через Excel (через VBA), я получаю исключение InvalidOperationException. Сообщение об ошибке "Нет строки соединения с именем" MegaDailyEntities "можно найти в файле конфигурации приложения. Это происходит в первый раз, когда я пытаюсь получить данные из базы данных.

Я столкнулся с этой проблемой с консольным приложением, но затем я включил следующее в свой файл App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>
    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
            <parameters>
                <parameter value="v11.0" />
            </parameters>
        </defaultConnectionFactory>
    </entityFramework>
    <connectionStrings>
        <add name="MegaDailyEntities" connectionString="metadata=res://*/MegaDaily.csdl|res://*/MegaDaily.ssdl|res://*/MegaDaily.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=CQI-Laptop1;initial catalog=MegaDaily;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

и он работал нормально.

Поэтому мой вопрос: как мне заставить Excel использовать это соединение? Есть ли файл конфигурации для Excel?

благодаря

  • 1
    Может кто-нибудь придумать более описательный заголовок, пожалуйста?
Теги:
dll
excel
entity-framework

1 ответ

2

Причина, по которой строка подключения не найдена, заключается в том, что файлы.config существуют только для приложений (.exe), но не для дополнительных библиотек (.dll)

Процесс Excel пытается загрузить строку подключения из Excel.exe.config, вместо загрузки из yourlibrary.dll.config

Рабочее решение для этого - отредактировать файл *.context.tt (генератор классов EntityFramework) и создать для вас DbContext. Вы найдете что-то вроде:

public <#=code.Escape(container)#>()
        : base("name=<#=container.Name#>")
{
    ...
}

Должно быть возможно изменить его на

public <#=code.Escape(container)#>()
        : base("your EF connection string")
{
    ...
}

Или посмотрите, как установить строку подключения из кода

  • 0
    Я заменил код, который вы предложили, и вместо этого получил UnintentionalCodeFirstException.
  • 0
    Вы использовали правильную строку подключения? например, "метаданные = ...."

Ещё вопросы

Сообщество Overcoder
Наверх
Меню