0

だから私は把握しようとしており、多対多の関係を作るためEF6にそれを使用しています。Identity 2.0Visual Studio 2013 と MVC 5 テンプレートです。

次のモデルを備えた新しい MVC アプリがあります。

public class Meeting
{
    public Guid MeetingID { get; set; }
    public string Title { get; set; }
    public virtual ICollection<ApplicationUser> Attendees { get; set; }
}

public class ApplicationUser : IdentityUser
{
    public ICollection<Meeting> Meetings { get; set; } 
}

次に、 のコントローラーとビューをスキャフォールディングしますMeetings。たとえば、 myにeveryuserを として追加したい場合、アクションを次のように変更できると想像できます。attendeemeetingCreate

public ActionResult Create(Meeting meeting)
{
    if (ModelState.IsValid)
    {
        meeting.MeetingID = Guid.NewGuid();
        db.Users.ForEachAsync(u => meeting.Attendees.Add(u));
        db.Meetings.Add(meeting);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    else...
}

ただし、自分には表示されないため、機能しているとは思いません。LocalDBこれを会議の詳細ビューに追加すると、結果が得られません。

@{foreach (var item in Model.Attendees)
{
    <li>@item.UserName</li>
}}

最後に、LocalDB には test と test2 という 2 人のユーザーがいます。

これを機能させるには、どのチュートリアルまたはドキュメントを使用すればよいですか?

* 編集 *

だから私はあなたの提案を試しました(認めますが、私は async と await とその実装方法に慣れていません)、await を使用できるようにコントローラーを変更する必要があったため、実行しているかどうかわかりませんこれは正しくなりましたが、次のようにコンパイルすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という実行時エラーが発生します。

    public async Task<ActionResult> Create(Meeting meeting)
    {
        if (ModelState.IsValid)
        {
            meeting.MeetingID = Guid.NewGuid();
            await db.Users.ForEachAsync(u => meeting.Attendees.Add(u));
            db.Meetings.Add(meeting);
            db.SaveChanges();

(Entity Framework でモデルのセットアップが欠落している可能性はありますか? プロジェクトは、まさに上記のコードに加えてデフォルトです。)

4

1 に答える 1

1

あなたは自分自身を蹴るつもりです:)

(ドラムロール)

await行の前に追加するのを忘れましたForEachAsync:

await db.Users.ForEachAsync(u => meeting.Attendees.Add(u));

アプリケーションがなければawait、非同期プロセスが完了する前に、レコードを喜んで続行して保存します。

アップデート

Attendeesコレクションを初期化していない可能性があります。コンストラクターで newList<ApplicationUser>に設定するだけです。

于 2014-05-11T01:31:37.423 に答える