Добавить данные из viewmodel в модели - PullRequest
0 голосов
/ 20 апреля 2020

Итак, вот мой контроллер. ViewModel содержит PIN-код участника и ID события. Теперь я хочу выяснить, какое событие связано с идентификатором, а какой элемент связан с PIN-кодом. Получив эту информацию, я хочу связать это событие с участниками, чей PIN-код был введен. Я добавлю класс члена и класс события ниже. (это отношения многие ко многим) Я просто запутался, как добавить событие в таблицу элементов

[HttpPost]
public ActionResult SignUp(MemberEventViewModel Vmodel) //signup action
{
var MemberinDB = _context.Members.Where(c => c.PIN == Vmodel.Member.PIN);

var EventinDB = _context.Events.Where(c => c.Id == Vmodel.Events.Id);
_context.Members.Add(EventinDB);
_context.SaveChanges();
}

класс элементов

public class Member
{
    public int Id { get; set; }
    [Required]
    [MaxLength(4, ErrorMessage = "PIN must be 4 numbers long"), MinLength(4, ErrorMessage = "PIN must be 4 numbers long")]
    public string PIN { get; set; }
    [Required]
    [Display(Name ="First Name")]
    public string FirstName { get; set; }
    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [Display(Name = "Date of Birth")]
    public DateTime? Birthdate { get; set; }
    public virtual ICollection<Event> Events { get; set; }

}

класс событий

public class Event
{

    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    [Display(Name = "Date")]
    public DateTime? EventDate { get; set; }
    [Required]
    [Display(Name = "Start Time")]
    public TimeSpan EventStartTime { get; set; }
    [Required]
    [Display(Name = "End Time")]
    public TimeSpan EventEndTime { get; set; }
    public int EventTotalTime{ get; set; }
    public virtual ICollection<Member> Members { get; set; }

}

1 Ответ

0 голосов
/ 21 апреля 2020

Используйте свойства навигации, чтобы связать ваши новые отношения.

var MemberinDB = _context.Members.Include(c => c.Events).Single(c => c.PIN == Vmodel.Member.PIN);

if(MemberinDB.Events.Any(e => x.Id == VModel.Event.Id))
    return; // Member and event already associated.

var EventinDB = _context.Events.Single(c => c.Id == Vmodel.Event.Id);
MemberInDB.Events.Add(EventinDB);

_context.SaveChanges();

Загружает участника и включает связанные события. Ваше отношение участника и событий зависит от многих, поэтому вы можете сделать это от участника, чтобы добавить событие, или от события, чтобы добавить участника. В приведенном выше примере проверяется, что событие не было добавлено, затем извлекает его и добавляет его к члену, если нет.

Ваша модель представления подразумевает, что у участника есть События, а не передача модели представления, чтобы представлять только новую ассоциацию события участника. Если вы передаете модель представления, которая содержит члена и все его события (включая существующие и новые ассоциации), вам может потребоваться дополнительный лог c, чтобы определить, какие ассоциации событий могут быть добавлены или удалены для обработки этих событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...