2013-10-25 3 views
2

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

Я столкнулся с этой проблемой с приложением консоли, но затем я включил следующий в моем 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

Может кто-нибудь придумать более описательное название, пожалуйста? – user1306322

ответ

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") 
{ 
    ... 
} 

Или посмотрите how to set connection string from code

+0

Я заменил код, который вы предложили, и вместо него получил UnintentionalCodeFirstException. – user2722816

+0

Вы использовали правильную строку подключения? например "metadata = ...." – Ondra

Смежные вопросы