私の Entity Framework では、MVC アプリケーションで .Net メンバーシップを使用しています (カスタム プロバイダーを作成しました)。私の質問は次のとおりです。
- 作成したエンティティにユーザーを関連付けるにはどうすればよいですか?
- IPrincipal を拡張するユーザー エンティティにナビゲーション プロパティをアタッチすることは許容されますか?それとも「クリーン」に保つ必要がありますか?
現在、新しいエンティティをユーザーにアタッチするすべてのアクションで、最初にユーザーを検索する必要があります。その後、頻繁に、ユーザーにナビゲーション プロパティがないため、別の DbSet から結果を取得するために 2 番目のクエリを実行する必要がありますか?
単純化すると、コントローラーは次のようになります。
public ActionResult Index() {
User u = UserRepository.FindById((int)Membership.getUser().ProviderUserKey);
List<OtherObject> oList = OtherRepository.FindByUser(u);
}
私がやりたいことは次のようなものです:
public ActionResult Index() {
List<OtherObject> oList = provider.User.OtherObjectList;
// or
List<OtherObject> oList = Membership.GetUser().OtherObjectList;
}
しかし、メンバーシップの使用方法に関してこれが正しいかどうかはわかりません(ユーザーはログイン/アカウントに必要な情報のみを保持しています.
これに関する最後の質問です。これが私のメンバーシップ ユーザーが現在どのように返されているかです。
public override MembershipUser GetUser(string username, bool userIsOnline) {
User u = UserRepository.FindByUsername(username);
MembershipUser memU = null;
if (u != null) {
//
memU = new MembershipUser("MyMembershipProvider",
username, u.UserID, u.Email, string.Empty,
u.Comment, u.IsApproved, u.IsLockedOut, u.CreationDate,
u.LastLoginDate, u.LastActivityDate, u.LastPasswordChangeDate,
u.LastLockedOutDate);
}
return memU;
}
だから私はユーザーを検索して新しい を作成しMembershipUser
、それを使用してすぐにコントローラーでユーザーを再度検索します-少し冗長に思えますが、これは私がすべきことですか?