5

このすべての新機能: UserProfile プロパティを持つ Character のモデルがあるため、キャラクターを UserProfile エントリに関連付けることができます。これにより、UserProfile が Character の外部キーになります。

キャラクターモデル:

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

(別の投稿のために UserProfile プロパティを仮想にしましたが、これを維持する必要があるかどうかはわかりません)

新しいキャラクターを作成するときに、そのキャラクターのユーザー プロパティを、リクエストを行っている現在の Web ユーザーのオブジェクトに設定したいと考えています。たとえば、ユーザーがキャラクターを作成するプロセスは次のとおりです。 ログイン/サイトでユーザー アカウントを作成 [キャラクターの作成] をクリックします。

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

問題は、コントローラーから UserProfile テーブルにアクセスする方法がわからないことです。通常、テーブルにアクセスするには、dbContext のオブジェクトを作成しますが、UserProfile テーブルはデフォルトの MVC 4 コンテキストを使用し、アプリの他のすべてのオブジェクトは別の dbContext を使用しています。

私にはいくつかの解決策があると思いますが、その方法を理解することはできません:

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

用語が間違っていたり、重要な情報が抜けていたりした場合は、事前に申し訳ありません。必要に応じてさらに提供します。ありがとう

4

2 に答える 2

7

ログインすると、UserId や UserName などのユーザー情報が保存されます。

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();
    ...
}
于 2013-05-05T18:55:47.060 に答える