2013-04-19 14 views
5

これまでの内容: 私は、UserProfileプロパティを持つCharacterのモデルを持っているので、UserProfileエントリで文字をアシストすることができます。これにより、UserProfileがCharacterの外部キーになります。コントローラからのUserProfileへのアクセスMVC 4

キャラクタモデル:

public class Character 
{ 
    public int ID { get; set; } 
    public virtual UserProfile user { get; set; } 
    public string name { get; set; } 
... 
} 

(私は、理由別のポストでのUserProfileプロパティは、仮想これはとどまるべきかどうかわからないように)

私はのユーザープロパティを設定する新しいキャラクターを作成しますそのキャラクタをリクエストしている現在のウェブユーザのオブジェクトに追加する。/ ログイン

[HttpPost] 
public ActionResult Create(Character character) 
{ 
    if (ModelState.IsValid) 
    { 
     character.user = ??? 
     db.Characters.Add(character); 
     db.SaveChanges(); 
     ... 
} 

問題は、私からのUserProfileテーブルにアクセスする方法がわからないです「の文字を作成」サイト をクリックしてユーザーアカウントを作成します。たとえば、ここでユーザーが文字を作るためにかかるプロセスです私のコントローラ。通常、テーブルにアクセスするには私のdbContextのオブジェクトを作成しますが、私のアプリケーションの他のすべてのオブジェクトが別のdbContextを使用している間に、UserProfileテーブルはデフォルトのMVC 4コンテキストを使用しています。私は私のためにいくつかの解決策があります推測している

、私が行う方法を見つけ出すことができたのどれも:

  1. は、私はすべてのテーブルが1 dbContextを使用するので、私のアプリケーションを設定しないべきか?もしそうなら、どうですか?
  2. UserProfileが既に使用しているデフォルトのdbContextのオブジェクトを作成する方法はありますか?

私の用語がオフになっている場合、または重要な情報が欠落している場合は、あらかじめご迷惑をおかけします。私は必要に応じてより多くを提供します。ありがとう

答えて

3

私は通常、セッション変数に現在のユーザーIDを保存し、必要に応じてそのユーザーをDBから取得します。だから、コードは次のようなものを見ることができる:あなたがユーザーIDまたはユーザ名などのユーザー情報でログインし

[HttpPost] 
public ActionResult Create(Character character) 
{ 
    if (ModelState.IsValid) 
    { 
     character.user = db.UserProfiles.Find(u => u.UserID = (int) Session["UserID"]); 

     db.Characters.Add(character); 
     db.SaveChanges(); 
    ... 
} 
+1

また、忘れてしまったら混乱するかもしれないと思います'UserProfile'エンティティの所有権。 Chris、 'AccountModels.cs'を見てください。 'UsersContext'という別の' DbContext'が存在するはずです。あなたはそれを使うことも、あなた自身でそれをマージすることもできます。 – Matt

+2

私はそれをあなた自身のものに移し、 'UsersContext'を完全に削除することによって所有権を得ることを強くお勧めします。 – Matt

+0

マット、そうです、これは私がしたいことです。それが可能であれば私は確信していましたが、どこにusersContextを探すべきか、どうやってこれを行うのですか?あなたがこれを行う方法についてもう少し詳しく、あなた自身の答えを書くつもりなら、本当に感謝しています。ありがとう! –

7

に保存されますWebSecurity.CurrentUserId

WebSecurity.CurrentUserName

[HttpPost] 
public ActionResult Create(Character character) 
{ 
    if (ModelState.IsValid) 
    { 
     character.user = db.UserProfiles.Find(u => u.UserID = WebSecurity.CurrentUserId); 

     db.Characters.Add(character); 
     db.SaveChanges(); 
    ... 
} 
+0

等価演算子、db.UserProfiles.Find(u => u.UserID == WebSecurity.CurrentUserId); – Dughall

関連する問題