10

EF 4.1を使用しており、通常のEFedmxファイルを作成しています。DBから生成します。

生成されたら、右クリックして[コード生成項目の追加]を選択し、新しいクラスを生成して、代わりにDbContextを使用します。テンプレートのDbContextジェネレーターを使用します。

すべてが正常に動作します。

次に、コンテキストを照会しようとします。

using (var context = new PasDBEntities())
{
    var client=context.ClientCompanies.SingleOrDefault(_=>_.ID==clientCompanyId);
    if(client!=null)

コンテキストの新しいインスタンスを作成するのに問題はありませんが、クエリを実行しようとすると問題が発生します。UnintentionalCodeFirstExceptionでスタックします。そして、エラーが発生します:

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

最初にコードを使用したくありませんが、コードを「オフ」にできるかどうか、または問題がどこにあるのかわかりません。

参考までに、これが私のコンストラクターです...

public partial class PasDBEntities : DbContext
{
    public PasDBEntities()
        : base("PasDBEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

...および接続文字列:

<connectionStrings>
    <add name="PasDBEntities" 
         connectionString="metadata=res://*/PasDB.csdl|
                                    res://*/PasDB.ssdl|
                                    res://*/PasDB.msl;
                           provider=System.Data.SqlClient;
                           provider connection string=&quot;
                           data source=localhost;
                           initial catalog=PasDB;
                           integrated security=True;
                           pooling=False;
                           multipleactiveresultsets=True;
                           App=EntityFramework&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>
4

1 に答える 1

7

クラスを生成するために、EDMX とテンプレート (.tt) を使用しているようです。ただし、既存のデータベースから情報を取得する場合、ウィザードは ObjectContext と互換性のある ConnectionString を作成します (メタデータ情報とエンティティ フレームワークのプロバイダー)。

問題は、使用している接続文字列が ObjectContext (Database First および Model First) 用であることです。DbContext の場合、メタデータ情報なしで接続文字列を使用する必要があります。

接続文字列は次のようになります。

<connectionStrings>
<add name="PasDBEntities" 
     connectionString="data source=localhost;
                       initial catalog=PasDB;
                       integrated security=True;
                       pooling=False;
                       multipleactiveresultsets=True;
                       App=EntityFramework"
     providerName="System.Data.SqlClient" />

于 2012-11-08T13:02:27.050 に答える