0

私はasp.netメンバーシップを持っており、この後、ユーザーによってはaspnet_UserTableにさらに2つのフィールドを追加したいので便利なので、組み込みのCreateuserメソッドを使用します。

私のaspnet_userテーブルで私はこのようにしています

// All Standard Fields that come with this table
ClubID<nullable)
ClubName <nullable)

これに関連する表があります

クラブテーブル

ClubID<PK>
ClubName

したがって、この関係は、1つのクラブが多くのユーザーを持つことができることを形成します。ただし、1人のユーザーが持つことができるクラブは1つだけです。

そこで、FKが表示されないため、Entity Frameworkダイアグラムに表示されないため、ClubIDをaspnetUsertableに追加する方法を理解しようとしています。

// Note in this case I am just using EF made to create but in reality I will use the Membership.Create. 
aspnet_Users test = aspnet_Users.Createaspnet_Users(Guid.NewGuid(), Guid.NewGuid(), "myTest5", "mytest5", false, DateTime.Now);

            test.Club = Club.CreateClub("One224", "Two224");
            test.ClubName = "go";

            MyEntities.AddToaspnet_Users(test);

            MyrEntities.SaveChanges();

だから私が持っているものはうまくいきますが、それは意味がなく、もっと良い方法があることを願っています。私がクラブを作成して、それをtest.clubに貼り付けようとするように。

この追加はClubIDの主キーですが、clubNameは追加されません。

そのため、クラブ名を個別に追加する必要があります。なぜですか?より良い方法はありませんか?

また、linqメソッドの構文が好きなので、必要であり、この構文を知っている場合は、その構文で記述してください。

4

1 に答える 1

4

いくつかお勧めします。

1: aspnet_* テーブルに列を追加しないことを強く検討してください。将来的に認証方法を変更したい場合は、それらのテーブルが不要になったとしても、テーブルを持ち歩くことになります。また、メンバーシップ スキーマをカスタマイズしたために、メンバーシップ プロバイダーの新しいより良いバージョンがいつの日かアップグレードできなくなる可能性があります。

2:代わりに、独自の主キーを持ち、ASP.NET メンバーシップの一意のキー (GUID) にリンクする User (または好みのもの) という名前の新しいテーブルを作成しないでください。

あなたのテーブルは次のようになります

User UserId (PK) AuthenticationUserId (aspnet_User テーブルへの FK バック) ClubId (クラブ テーブルへの FK バック)

3: user テーブルと Club テーブルの両方で ClubName を繰り返した理由がわかりません。ClubName を定義する必要があるのは本当に 1 回だけですよね? Club テーブルをそのままにして、ユーザー テーブルから ClubName 列を削除します。

クラブをユーザーに関連付けるための上記のコードは正しく、機能します。これが Entity Framework の仕組みだからです。エンティティを相互に関連付けており、データ スキーマのリレーショナルな側面から抽象化されています。最初に慣れるのは少し奇妙ですが、うまくいきます。

于 2009-08-12T00:01:46.887 に答える