C# 使用ViewModel EF ASP.NET MVC插入一个多个关系数据
我试图弄清楚如何使用带有一个回发的viewmodel插入多行数据。我使用EF和代码优先的方法。我遇到问题的模型有一对多关系。我想做的是,无论何时创建一个人,都应该将多个任务与一个人(不同的表)一起保存到数据库中 到目前为止,我只能保存第一项任务,而不是全部任务 我的模型是:C# 使用ViewModel EF ASP.NET MVC插入一个多个关系数据,c#,asp.net-mvc,entity-framework,ef-code-first,viewmodel,C#,Asp.net Mvc,Entity Framework,Ef Code First,Viewmodel,我试图弄清楚如何使用带有一个回发的viewmodel插入多行数据。我使用EF和代码优先的方法。我遇到问题的模型有一对多关系。我想做的是,无论何时创建一个人,都应该将多个任务与一个人(不同的表)一起保存到数据库中 到目前为止,我只能保存第一项任务,而不是全部任务 我的模型是: public class Person { public Person() { this.Tasks = new List<Task>(); } [Key]
public class Person
{
public Person()
{
this.Tasks = new List<Task>();
}
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Task> Tasks { get; set; }
}
public class Task
{
[key]
public int ID { get; set; }
public int PersonID { get; set; }
public string Task { get; set; }
public virtual Person Person { get; set; }
}
视图:
至少我知道任务正在通过。我尝试了一些类似的事情
foreach (char c in personData.Task.Task.AsEnumerable)
{ count += 1}
并收到了正确数量的号码。我认为使用ViewModels是比较常见的,但我没有看到我想在任何教程或论坛中做什么
我的目标是能够通过一次回发为每个人保存多个任务。任何建议都将不胜感激 在ViewModel中,您只有一个任务,应该是一个任务列表,对吗? 当我做这样的事情时,我通常先保存Person对象,然后使用ajax向其中添加任务 这个方法可能看起来像这样
public void SaveTasks(List<Task> tasks){
//important that tasks already have personId --set on client side
foreach(var task in Tasks){
//do some validation
db.Tasks.Add(task);
}
db.SaveChanges();
}
public void SaveTasks(列出任务){
//重要的是,任务已经在客户端设置了personId
foreach(任务中的var任务){
//做一些验证
db.Tasks.Add(任务);
}
db.SaveChanges();
}
使用JavaScript输出文本框有什么原因吗?这给你带来了一些问题…是的,任务部分是可选的。我实际拥有的是一个包含0-5的下拉列表。基于该值,我将为任务显示适当数量的文本框。我曾想过把所有的文本框都放在那里并隐藏/取消隐藏,但是用jquery生成的文本框看起来更干净。你有没有找到一个公平的解决方案?我遇到了完全相同的情况,我还没有找到描述在单个视图中将数据插入到“子”和“父”表中的文档。很抱歉,我从未使用过ajax,而且对mvc还是很陌生,所以我很困惑。。。也因为我有任务列表中的个人对象。这不应该考虑插入多个任务吗?
public class PersonController : Controller
{
private Context db = new DBContext();
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(ViewModels.PersonData personData)
{
if (ModelState.IsValid)
{
db.Person.Add(eventData.Person);
db.Tasks.Add(eventData.Task);
db.SaveChanges();
return RedirectToAction("Index");
}
return View();
}
foreach (char c in personData.Task.Task.AsEnumerable)
{ count += 1}
public void SaveTasks(List<Task> tasks){
//important that tasks already have personId --set on client side
foreach(var task in Tasks){
//do some validation
db.Tasks.Add(task);
}
db.SaveChanges();
}