ASP.NET MVC 4代码首先多对多添加到集合

时间:2013-02-08 08:12:20

标签: collections asp.net-mvc-4 many-to-many add code-first

我正在使用ASP.NET MVC 4代码第一个模式用于数据库层。我在UserProfile和Task之间有很多关系。当我尝试将任务添加到用户的任务集合时,它已添加但是如果我尝试查询它并查看它是否存在则不会显示。

我的模特:

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string FirstName { get; set; }
    public string SirName { get; set; }
    public string Position { get; set; }
    public string Email { get; set; }
    public ICollection<TaskModels> Tasks {get; set; }
    public bool? isActive { get; set; }

    public UserProfile()
    {
        Tasks = new HashSet<TaskModels>();
    }
}

public class TaskModels
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }
    public ICollection<UserProfile> Employees { get; set; }
    public int TimeNeeded { get; set; }
    public int TimeWorked { get; set; }
    public string Status { get; set; }
    public bool isActive { get; set; }

    public TaskModels()
    {
        Employees = new HashSet<UserProfile>();
    }
}

public class WorkLogModels
{
    public int Id { get; set; }
    public UserProfile Author { get; set; }
    public DateTime TimeBeganWorking { get; set; }
    public int TimeWorkedOn { get; set; }
    public TaskModels Task { get; set; }
    public string Description { get; set; }
}

公共类TimeTrackerDb:DbContext     {         public TimeTrackerDb():base(“DefaultConnection”)         {

    }

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<TaskModels> Tasks { get; set; }
    public DbSet<WorkLogModels> WorkLogs { get; set; }
}

我尝试检查任务的员工列表中是否已存在UserProfile并且它始终为空。

    [HttpPost]
    public ActionResult Create(WorkLogModels worklogmodels)
    {
        var tasks = db.Tasks.Where(x => x.Name == worklogmodels.Task.Name).SingleOrDefault();
        if (tasks == null)
        {
            return View(worklogmodels);
        }
        if (ModelState.IsValid)
        {
            var user = db.UserProfiles.Where(x => x.UserId == WebSecurity.CurrentUserId).FirstOrDefault();
            var task = db.Tasks.Where(x => x.Name == worklogmodels.Task.Name).FirstOrDefault();
            WorkLogModels log = new WorkLogModels();
            log.Description = worklogmodels.Description;
            log.TimeBeganWorking = worklogmodels.TimeBeganWorking;
            log.TimeWorkedOn = worklogmodels.TimeWorkedOn;
            log.Author = user;
            log.Task = task;
            db.WorkLogs.Add(log);

            if (!db.UserProfiles.Where(x => x.UserId == WebSecurity.CurrentUserId).First().Tasks.Any(x=> x.Name == worklogmodels.Task.Name))
            {
                db.UserProfiles.Where(x => x.UserId == WebSecurity.CurrentUserId).FirstOrDefault().Tasks.Add(task);
                db.Tasks.Where(x => x.Name == worklogmodels.Task.Name).FirstOrDefault().Employees.Add(user);
            }
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(worklogmodels);
    }

我已经和他斗争了两天了。

非常感谢任何帮助

修改

我不确定我是否清楚自己。在WorkLog Controller的Crate操作中,我试图将当前用户放在当前任务的集合中,反之亦然。它第一次正常工作,但是如果我再次执行它,则无法跳过if语句并尝试再次添加它并抛出异常:System.Data.SqlClient.SqlException。它试图将相同的记录添加到中间表中。

0 个答案:

没有答案