20

既存のデータベースに基づいてEntityFrameworkモデルを作成し、モデルからPOCOエンティティを生成しました。私のweb.configの接続文字列はEntityFrameworkではなく、単なる標準の接続文字列です(CSDL、SSDL、MSL参照がありません)。

アプリケーションをコンパイルできますが、実行すると次のエラーが発生します。

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


私の質問は、POCOが自動生成から来たことをコードのどこで認識し、コードファーストのように動作させるにはどうすればよいかということです。接続文字列でCSDLなどを参照したくありません。

4

3 に答える 3

23

接続文字列にメタデータがある場合、EFはそれがモデルファーストまたはデータベースファーストであると見なします。プレーンな接続文字列の場合、EFはそれがコードファーストであると見なします。ただし、最初にモデルの実行を開始したいが、EFに実際にコードを実行していると思わせる場合(これは実行していることです)、デフォルトではなく、DbContextコードジェネレーターを使用していることを確認してください。コードファーストのPOCOは、実際には「プレーンな古いc#オブジェクト」であり、特別なデータベースを認識したり、追跡機能を変更したりすることはまったくありません。DbContextコードジェネレーターを使用するには、モデルダイアグラムを右クリックし、[新しいコード生成アイテムを追加...]を選択してから、ADO.NETDbContextジェネレーターを選択します。また、主キーと外部キーの名前の付け方や、単純なint IDよりも複雑かどうかによって、コンテキストの「OnModelCreating」メソッドでオブジェクト間の関係をマップするために、おそらくいくつかのコードを入力する必要があります。行を削除しますthrow new UnintendedCodeFirstException();マッピングコードに置き換えます。そうしないと、EFがすべての関係を把握できない可能性があります(依存するメタデータがないことを忘れないでください)。

お役に立てれば。

于 2011-12-23T16:59:14.787 に答える
12

設定ファイルには次のものが必要です。

<connectionStrings>
<add name="<The name of your class>" 
     connectionString="metadata=res://*/<test>.csdl|res://*/<test>.ssdl|res://*/<test>.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=<your source>;initial catalog=<your db>;persist security info=True;user id=<your user id>;password=<your password>;multipleactiveresultsets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />
</connectionStrings>
于 2012-08-16T13:19:39.090 に答える
0

私は最初にデータベースを使用しており、EDMXで生成された接続文字列をスタートアップアプリケーションのapp.configにコピーすることでこれを解決しました。1つはすでに存在していましたが、明らかにそれらは異なっていました

于 2015-05-04T15:32:46.713 に答える