2016-10-25 93 views
0

我在解決方案中有三個項目,分別稱它們爲客戶端,服務器和主機。WCF:使用實體框架-App.config

我按照https://msdn.microsoft.com/en-us/library/ms734712%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396建立一個服務,該服務也在我製作的控制檯主機上運行。

我也在服務中使用Entity Framework來將數據存儲到MySql中。

現在的問題:實體框架與服務項目中的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>