0

クリーンな MVC 3 プロジェクトがあり、セキュリティ アカウントに SqlCe メンバーシップ プロバイダーを使用しています。

接続文字列でメンバーシップ プロバイダーとエンティティ フレームワークが同じ「データベース」を使用するように指定すると、EF Code First モデルでテーブルが見つからないというエラーが発生します。

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0" />
    <add name="SqlDbContext" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0" />
  </connectionStrings>

ただし、別のデータベース名を指定すると、完全に機能しますが、2 つの別個の SDF ファイルが作成されます。次の接続文字列が機能します。

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet.sdf" providerName="System.Data.SqlServerCE.4.0" />
    <add name="SqlDbContext" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0" />
  </connectionStrings>

2 つの個別の SDF テーブルを指定した場合にのみ機能するのはなぜですか? また、単一の SDF データベースをメンバーシップ プロバイダーと ef モデルに利用するにはどうすればよいでしょうか?

4

2 に答える 2

1

問題の理由は、テーブル作成のための最初の内部ロジックのコードです。EF 5.0 RC を除くすべてのバージョンは、データベースと共にのみテーブルを作成します。データベースが存在し、データベースを削除できる初期化戦略を使用していない場合、テーブルは作成されません。次に、データベースを削除する戦略を使用すると、メンバーシップ テーブルが失われます。

既存のデータベースにテーブルを作成するカスタム データベース初期化子を作成するか、Seed メソッドでメンバーシップ テーブルを作成するための DDL スクリプトを実行するカスタム データベース初期化子を作成するか、既存のデータベースにテーブルを作成できるEF 5.0 RCを試すことができます。箱。

または、最初にコードでデータベースを作成してからメンバーシップ テーブルを手動で追加することもできますが、コードで最初にデータベースを再作成するたびに (移行を使用しない場合)、メンバーシップ テーブルが削除され、手動で再度追加する必要があります。

于 2012-06-01T10:28:02.547 に答える
0

私が取り組んでいるサイトのメンバーシップ/ロール/プロファイル管理者をロールバックしている最中で、この質問に出くわしました。この質問には少し遅れましたが、まだこれに取り組んでいる場合は、このリンクが役立ちます: http://imar.spaanjaars.com/563/using-entity-framework-code-first-and-aspnet -メンバーシップ-一緒に

HTH

于 2012-12-05T15:51:29.173 に答える