0

私のシナリオを明確にしましょう。ライブラリを使用するWCFサービスがあります。このライブラリには、データベースモデル(edmx)が存在します。

私のWCFサービスでは:

[DataContract]
public class QuestionSetInformation
{
    [DataMember]
    public string Id { get; set; }
    [DataMember]
    public string SetName { get; set; }
    [DataMember]
    public string ObjectiveName { get; set; }
}

[ServiceContract]
public interface IService1
{
    [OperationContract]
    QuestionSetInformation[] GetQuestionSets(string objectiveName);
}

public QuestionSetInformation[] GetQuestionSets(string objectiveName)
{
    var query = from r in QuestionRepositoryManager.GetRepositories()
                select new QuestionSetInformation()
                {
                   Id = r.Id,
                   SetName = r.SetName,
                   ObjectiveName = r.ObjectiveName
                };

    return query.ToArray();
}

ライブラリはEDMXを使用しているため、接続文字列をWCFに移動すると、WCFテストクライアントを使用して完全に機能します。それは私が期待しているものを私に届けます。

<?xml version="1.0"?>
<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>
  <connectionStrings>
    <add name="ContosoDb" connectionString="metadata=res://*/Entities.Model1.csdl|res://*/Entities.Model1.ssdl|res://*/Entities.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=X;initial catalog=contoso2_db;persist security info=True;user id=X;password=X;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>

ただし、デスクトップアプリケーションでこのWCFを使用すると、次の例外が発生します。

        ServiceReference1.Service1Client service = new ServiceReference1.Service1Client("BasicHttpsBinding_IService1");
        ServiceReference1.QuestionSetInformation[] qss = service.GetQuestionSets("something");

FaultException`1は未処理でした。データベースファーストおよびモデルファースト開発用のT4テンプレートを使用して生成されたコードは、コードファーストモードで使用すると正しく機能しない場合があります。DatabaseFirstまたはModelFirstを引き続き使用するには、実行中のアプリケーションの構成ファイルでEntityFramework接続文字列が指定されていることを確認してください。データベースファーストまたはモデルファーストから生成されたこれらのクラスをコードファーストで使用するには、属性またはDbModelBuilder APIを使用して追加の構成を追加してから、この例外をスローするコードを削除します。

私はこのエラーをWebで調査しました。誰もが接続文字列を使用して問題について話しますが、同じケースではないと思いました。どうやって直せばいいのかわからない

4

1 に答える 1

0

これは、使用している接続文字列の問題です...何らかのデフォルトの SqlClient 接続文字列 (つまり、3 つの EF メタデータ ファイルを指定するエンティティ フレームワーク接続文字列ではない) を使用しているため、Code First モードで実行していると思われます。

接続文字列の名前が同じであること、または使用する接続文字列名を DbContext コンストラクターに渡していることを確認してください。

于 2013-03-25T23:36:29.373 に答える