2016-10-25 2 views
0

У меня есть три проекта в решении, позвоните им клиенту, serivce и host соответственно.WCF: работа с Entity Framework-App.config

Я следую за https://msdn.microsoft.com/en-us/library/ms734712%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396, чтобы построить сервис, который работает на консольном хосте, построенном мной.

Я также использую Entity Framework в сервисе для хранения данных в MySql.

Теперь вопрос: у Entity Framework что-то происходит с app.config в проекте сервиса. Однако ссылка, приведенная выше от Microsoft, говорит мне запустить хост в качестве стартового проекта, что приводит к тому, что служба не может найти ее конфигурацию, которая находится в проекте службы, а не в проекте-хозяине.

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

Так что я должен сделать, чтобы мой код работал?

App.config:

<?xml version="1.0" encoding="utf-8"?> 

<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" 
      type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
      requirePermission="false" /> 
    </configSections> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- 部署服务库项目时,必须将配置文件的内容添加到 
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。 --> 
    <system.serviceModel> 
    <services> 
     <service name="Server.CalculatorService"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8733/Design_Time_Addresses/Server/Service1/" /> 
      </baseAddresses> 
     </host> 
     <!-- Service Endpoints --> 
     <!-- 除非完全限定,否则地址相对于上面提供的基址--> 
     <endpoint address="" binding="basicHttpBinding" contract="Server.ICalculator"> 
      <!-- 
       部署时,应删除或替换下列标识元素,以反映 
      用来运行所部署服务的标识。删除之后,WCF 将 
       自动推断相应标识。 
      --> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <!-- Metadata Endpoints --> 
     <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 --> 
     <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除--> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- 为避免泄漏元数据信息, 
      请在部署前将以下值设置为 false --> 
      <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" /> 
      <!-- 要接收故障异常详细信息以进行调试, 
      请将以下值设置为 true。在部署前设置为 false 
      以避免泄漏异常信息 --> 
      <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
    <!-- <entityFramework>--> 
    <!-- <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">--> 
    <!--  <parameters>--> 
    <!--  <parameter value="mssqllocaldb" />--> 
    <!--  </parameters>--> 
    <!-- </defaultConnectionFactory>--> 
    <!-- <providers>--> 
    <!--  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />--> 
    <!--  <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>--> 
    <!-- </providers>--> 
    <!-- --> 
    <!-- </entityFramework>--> 

    <entityFramework> 
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" /> 
    <providers> 
     <provider invariantName="MySql.Data.MySqlClient" 
       type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
    </providers> 
    </entityFramework> 
    <connectionStrings> 
    <add name="Model1Container" providerName="System.Data.SqlClient" 
     connectionString="Server=127.0.0.1;user id=root;password=88;persistsecurityinfo=True;database=guessFigure" /> 
    <add name="RankADONETModel" 
     connectionString="server=127.0.0.1;user id=root;password=88;persistsecurityinfo=True;database=guessFigure" 
     providerName="MySql.Data.MySqlClient" /> 
    </connectionStrings> 
</configuration> 

ответ

0

вам нужно также конфиг раздел, как это под "конфигурации", изменить поставщика SQL для MySQL

<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="mssqllocaldb" /> 
    </parameters> 
</defaultConnectionFactory> 
<providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
</providers> 

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