19

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

私は自分のアプリケーションをコンパイルすることができますが、私が実行したときに、私はこのエラーを取得:

Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception


私の質問である。ここで、それはPOCOSが自動生成から来て、どのようにすることができます実現しない私のコードで私はコードファーストのように振る舞うのですか?私は接続文字列でCSDLなどを参照したくありません。

+0

最初にモデルとコードの両方を使用する必要があるのは悪いです... – Serdar

+1

@Serdar - 必ずしも必要はありません。彼は既知のモデルからコードを生成したいかもしれませんが、その時点からコードを使って新しいコードを書き始めます。 –

+0

私はちょうどそれを持っている:)申し訳ありません... – Serdar

答えて

23

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

これが役に立ちます。私が最初にデータベースを使用してい

<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> 
+0

あなたの返信は私を助けました。そして私は私の質問/ reply @ http://stackoverflow.com/questions/18674079/ef-5-0-database-first-model-not-working-on-one-table/18675388#18675388にあなたの参照を入れました – HGMamaci

+0

@HGMあなたはこの回答が役に立ちました。 –

12

は、あなたの設定ファイルに次のようにする必要があります。 1つは既に存在しましたが、明らかにそれらは異なっていました

+0

こんにちはJohn、ありがとうございました。あなたの答えは私のためにうまくいった。 –

+0

connectionStringを(localdb)データソースからSQLデータソースに切り替える場合は、このソリューションを使用します。つまり、データソースに実際のサーバー名を指定している場合は、このソリューションを使用します。 –

0

、私のスタートアップアプリケーションのapp.configをに接続文字列を生成しEDMXをコピーすることによって、これを解決:

関連する問題