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つの問題のいずれかに遭遇しています。
- 画像のモデルを使用すると、次のエラーが発生 します。464行目から始まるフラグメントのマッピングの問題:EntitySets'UserSet'と'aspnet_Membership'は両方ともテーブル'aspnet_Membership'にマッピングされています。それらの主キーが衝突する可能性があります。
- モデルからaspnet_Membershipテーブルを削除すると(上記のエラーを処理するため)、次のようになります 。384行目から始まるフラグメントのマッピングの問題:テーブルaspnet_Membershipの列aspnet_Membership.ApplicationIdをマッピングする必要があります:デフォルト値がなく、null許容ではありません。
バッキングストアを手作業で編集する能力は最高ではなく、他のものを壊す可能性のあるものをハックしたくありません。これを処理するための提案、ベストプラクティスなどを探しています。
注: 既存のアプリのすべてのロジックを置き換えることはできないため、データテーブル自体を移動することはできません。新しいアプリ用にこのEFプロバイダーを構築しています。今後6か月で、古いアプリはビットごとに新しい構造に移行します。
注: 見やすくするために、画像のすぐ下にフルサイズの画像へのリンクを追加しました。