首页 > 解决方案 > 将数据从视图模型添加到模型

问题描述

所以这是我的控制器。ViewModel 包含成员的 PIN 和事件 ID。现在我想找出哪个事件与 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; }

}

标签: c#entity-frameworkmodel-view-controller

解决方案


使用导航属性关联您的新关系。

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();

这将加载成员并包括关联的事件。您的成员和事件关系是多对多的,因此您可以从成员添加事件或从事件添加成员。上面的示例检查该事件是否未被添加,如果没有,则检索它并将其添加到成员中。

您的视图模型意味着一个成员有事件,而不是传递一个视图模型来表示一个新的成员事件关联。如果您正在传递一个包含成员及其所有事件(包括现有关联和新关联)的视图模型,那么您可能需要一些额外的逻辑来识别可能已添加或删除哪些事件关联来处理这些事件。


推荐阅读