2

LINQ&Entitiesを使用してASP.NETメンバーシッププロバイダーを.NET3.5に移植する方法について読んでいます。ただし、すべてのサンプルが示すDBモデルは新しいモデルですが、私はかなり古いモデルを継承しています。違い:

  • ユーザーテーブルは、ユーザーテーブルとメンバーシップテーブルのペアに分割されます。
  • DB内のすべてのテーブルには、aspnet_が付加されます。
  • 一部の列(ユーザー名、電子メールなど)のバージョンを下げました

これを操作するために、プロパティをMembershipテーブルからUserテーブルにコピーし(DBではこれは1<->0,1ではなく1<->1の関係です)、名前をaspnet_ApplicationsからApplicationに、aspnet_ProfilesをProfileに変更しました。 、aspnet_UsersをUserに、aspnet_RolesをRoleに。(画像を参照)

画像http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/c3cabe76-272d-4a33-b924-8d2c50e45e9c/EFMembership.png
モデルのフルサイズ画像へのリンク

現在、コンパイルしようとすると、2つの問題のいずれかに遭遇しています。

  1. 画像のモデルを使用すると、次のエラーが発生 します。464行目から始まるフラグメントのマッピングの問題:EntitySets'UserSet'と'aspnet_Membership'は両方ともテーブル'aspnet_Membership'にマッピングされています。それらの主キーが衝突する可能性があります。
  2. モデルからaspnet_Membershipテーブルを削除すると(上記のエラーを処理するため)、次のようになります 。384行目から始まるフラグメントのマッピングの問題:テーブルaspnet_Membershipの列aspnet_Membership.ApplicationIdをマッピングする必要があります:デフォルト値がなく、null許容ではありません。

バッキングストアを手作業で編集する能力は最高ではなく、他のものを壊す可能性のあるものをハックしたくありません。これを処理するための提案、ベストプラクティスなどを探しています。

注: 既存のアプリのすべてのロジックを置き換えることはできないため、データテーブル自体を移動することはできません。新しいアプリ用にこのEFプロバイダーを構築しています。今後6か月で、古いアプリはビットごとに新しい構造に移行します。

注: 見やすくするために、画像のすぐ下にフルサイズの画像へのリンクを追加しました。

4

2 に答える 2

0

キース

Thnisは私の頭から離れています...

あなたのスクリーンショットがよく見えません。しかし、最初の試みは、同じテーブルを指す2つのエンティティに重複するプロパティを設定することだったと思います。合法ではありません。

2回目の試みは、エンティティの分割を行うことだったようです。ただし、ストアスキーマからテーブル定義を削除したように見えます。

それを元に戻し、エンティティ分割を行うことをお勧めします(テーブル1とテーブル2がエンティティキーを共有している場合に実行可能な、2つのテーブルからの小道具を持つ1つのエンティティ)。

そのためのウォークスルーへのポインタが必要ですか?私は1つを見つけるためにグーグルする必要があります。きっとどこかにブログ記事があります。

ジュリー

于 2010-03-05T22:40:01.950 に答える
0

私はEF4を使用してこれを回避しました。EF4には「FKアソシエーション」があります。これにより、PK / FK(ApplicationId)をエンティティに含め、FKを介してマップした関連付けを使用できます。

これを行うには、ApplicationIdをそれに依存する各エンティティに追加し直してから、エンティティ間に作成した関連付けをダブルクリックして、2つのPK/FKを相互にマッピングする必要があります。

今、彼らが列挙型サポートしか追加できなかったら...:/

于 2010-03-18T13:29:35.563 に答える