MVC使用多个表,2首先用代码生成,第一个用DB生成

时间:2014-04-03 20:10:40

标签: asp.net-mvc-5

我是MVC的新手,我认为之前有人回答了这个问题,所以我为重新发布它而道歉。 多年来我一直是一名基于表单的程序员,现在我第一次参与MVC项目,过去3周我阅读了很多书籍,文章,教程并观看了很多关于MVC的视频。

这是我的问题: - 我有3个表:任务,客户和员工 每项任务都有1名客户和1名员工。我从SQL DB上的现有表生成了Tasks表,但我遵循“Code-First”来创建employee表和Customer表。我不确定我是否在这些表之间建立了正确的关系。我想要做的是显示所有任务+ userNAME + CustomerName而不是UserID和CustomerID。

以下是我的模特:

任务:

public partial class Tasks
{        
    public string TaskID { get; set; }
    public string Name { get; set; }
    public System.DateTime StartDate { get; set; }
    public Nullable<System.DateTime> DueDate { get; set; }
    public Nullable<int> Complete { get; set; }
    public string Description { get; set; }
    public Nullable<int> Priority { get; set; }
    public string Status { get; set; }
    public Nullable<System.DateTime> AssignementDate { get; set; }
    public Nullable<System.DateTime> CreationDate { get; set; }
    [ForeignKey ("Employee")]
    public string EmployeeID { get; set; }
    public virtual ApplicationUser _User { get; set; }
    [ForeignKey("Customer")]
    public string CustomerID { get; set; }
    public virtual CustomerModel _Customer { get; set; }
}

客户:

public class CustomerModel
{
    [Key]
    public String ID { get; set; }
    public String Number { get; set; }

}

员工

public class EmployeeModel
{
    [Key]
    public string Id { get; set; }
    public string FirstName { get; set; }

    public string LastName { get; set; }


}
  • 此外,如何从我的任务控制器访问员工名字。
  • 最后一个问题:在模型之间混合是否可行(某些代码优先和某些DB优先)或者我应该遵循一种模式。

非常感谢

1 个答案:

答案 0 :(得分:0)

您可以使用这两种模式,但我建议您使用CodeFirst,创建entites来存储数据和视图模型来显示数据:

public class Task
{        
    public int TaskID { get; set; }
    //your other properties here...

    public int EmployeeId { get; set; }
    public int UserId { get; set; }
    public int CustomerId { get; set; }
}

在客户律师中,为Task模型创建ViewModel:

public class TaskViewModel
{        
    public Task Task { get; set; }
    public EmployeeModel Employee { get; set; }
    public ApplicationUser User { get; set; }
    public CustomerModel Customer { get; set; }
}

在您的GetTask()(或LoadTasks())方法中填写此视图模型:

public TaskViewModel GetTask(int id) 
{
   TaskViewModel model = new TaskViewModel();
   model.Task = _db.GetTaskById(id);
   model.Employee = _db.GetEmployeeById(model.Task.EmployeeId);
   model.User = _db.GetUserById(model.Task.UserId);
   model.Customer = _db.GetCustomerById(model.Task.CustomerId);
   return model;
}

现在,您可以获得与任务相关的所有数据:

TaskId, TaskName, Created user's name + surname, Employee's name surname, Custemer's name  + surname etc..