Отношения по коду сущности mvc3 в первую очередь - PullRequest
0 голосов
/ 09 ноября 2011

У моего проекта есть два объекта: пользователи и встречи

У каждого собрания есть один пользователь, который является «главой» собрания, и множество простых пользователей.

Мои модели такие:

public class Meeting
{
    public int MeetingId { get; set; }
    public string Title { get; set; }
    public virtual User User { get; set; }
    public Location From { get; set; }
    public Location To { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

public class Location
{
    public float Lat { get; set; }
    public float Long { get; set; }
}

public class User
{
    public int UserId { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

Я создал контроллер для модели собрания. Теперь каждый раз, когда я добавляю другое собрание a и в поле пользователя, я помещаю существующий идентификатор пользователя, этот пользователь не вставляется, и создается новый пользователь.

Что не так?

редактировать контроллер создания

[HttpPost]
    public ActionResult Create(Tremp tremp)
    {
        if (ModelState.IsValid)
        {
            db.Tremps.Add(tremp);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        return View(tremp);
    }

в форме я просто введите идентификатор пользователя

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Если ваша сущность tremp имеет ссылку на существующего пользователя (tremp.User), вы должны присоединить этого пользователя к контексту, прежде чем добавлять tremp. Это говорит EF, что этот пользователь существует в базе данных и избегает вставки нового пользователя:

[HttpPost]
public ActionResult Create(Tremp tremp)
{
    if (ModelState.IsValid)
    {
        db.Users.Attach(tremp.User);
        db.Tremps.Add(tremp);
        db.SaveChanges();
        return RedirectToAction("Index");  
    }

    return View(tremp);
}
0 голосов
/ 09 ноября 2011

Сначала я не эксперт по EF-коду, но ваш пример кода вызвал у меня некоторое дежавю. Я думаю, что проблема в том, что вам нужно настроить отношения между «главным» пользователем и собранием, например,

public class Meeting
{
    public int MeetingId { get; set; }
    public string Title { get; set; }

    [ForeignKey("UserId")]
    public virtual User User { get; set; }

    [Column(name: "UserId")]
    public int HeaderUserId { get; set; }

    public Location From { get; set; }
    public Location To { get; set; }
    public virtual ICollection<User> Users { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...