【问题标题】:Add objects to List of current user asp.net mvc using linq使用 linq 将对象添加到当前用户 asp.net mvc 列表
【发布时间】:2019-01-09 18:56:06
【问题描述】:

我正在开发一个 ASP.NET MVC 应用程序,用户可以登录/注册为管理员、个人帐户或公司。公司和个人模型具有其他对象列表的属性。我需要知道如何在个人登录列表中添加一些内容,并在数据库中更新它

我在控制器中处理的方法..

 public ActionResult Create([Bind(Include = "Id,Name,Date,Location,StartTime,EndTime,IsPublic")] Event @event)
        {
            string currentUserId = User.Identity.GetUserId();
            ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);

            if (ModelState.IsValid)
            {
                db.Events.Add(@event);
                db.SaveChanges();
                if (User.IsInRole("Company"))
                {
                    Company CompanyHosting = db.Companies.FirstOrDefault(x => x.Email == currentUser.Email);
                    var company = from e in db.PersonalUsers
                                 where e.Email == currentUser.Email
                                 select e;
                    foreach (var item in company)
                    {
                        item.HostedEvents.Add(@event);
                        db.SaveChanges();
                    }
                    db.SaveChanges();
                }
                else if (User.IsInRole("PersonalUser"))
                {
                    PersonalUser PersonHosting = db.PersonalUsers.FirstOrDefault(x => x.Email == currentUser.Email);
                    var person = from e in db.PersonalUsers
                                 where e.Email == currentUser.Email
                                 select e;
                    foreach (var item in person)
                    {
                        item.HostedEvents.Add(@event);
                        db.SaveChanges();
                    }
                    db.SaveChanges();
                }
                return RedirectToAction("Index");
            }

            return View(@event);
        }

PersonalUser 的模型.. Company 看起来几乎相同..

public class PersonalUser
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string Password { get; set; }
    public bool AcceptsTextNotifications { get; set; }
    public bool AcceptsEmailNotifications { get; set; }
    public List<PersonalUser> PeopleIFollow = new List<PersonalUser>();
    public List<PersonalUser> PeopleThatFollowMe = new List<PersonalUser>();
    public List<Company> CompaniesIFollow = new List<Company>();
    public List<Company> CompaniesThatFollowMe = new List<Company>();
    public List<Event> HostedEvents = new List<Event>();
    public List<Event> EventsGoingTo = new List<Event>();

    [ForeignKey("ApplicationUser")]
    public string ApplicationUserID { get; set; }
    public ApplicationUser ApplicationUser { get; set; }
}

以及事件模型..

   public class Event
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime Date { get; set; }
        public string Location { get; set; }
        public string StartTime { get; set; }
        public string EndTime { get; set; }
        public bool IsPublic { get; set; }

        public List<PersonalUser> PersonalInvited = new List<PersonalUser>();
    }

为什么是线条 item.HostedEvents.Add(@event); db.SaveChanges(); 不更新数据库,将该事件插入个人或公司模型 List HostedEvents??

【问题讨论】:

  • 你有什么错误吗?如果没有,您是否调试过您的事件参数是否获取值?
  • @MukeshModhvadiya 没有错误,事件参数得到正确的信息。 var item 也得到正确的信息。
  • 您在 if 和 else 中从 PersonalUsers 中选择具有不同名称 company 和 person 的记录。
  • @MukeshModhvadiya 感谢您的提醒!虽然不会修复代码

标签: c# asp.net linq model-view-controller entity


【解决方案1】:

您只是将事件添加到项目的 EventList,而不是告诉 DbContext 更新项目。修改如下:

foreach (var item in person)
{
    item.HostedEvents.Add(@event);
    db.PersonalUsers.Update(item);
}
db.SaveChanges();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多