【发布时间】:2016-07-22 13:07:36
【问题描述】:
这是 POCO 代码头等舱:
class Contact{
[Key]
public int Id {get; set;}
public string name {get; set;}
public ICollection<Phone> phones{get; set;}
}
class Phone{
[Key]
public int id {get;set;}
public string phone_type {get; set;}
public string phone_number {get; set;}
public Contact contact { get; set; }
}
我想将它持久化到数据库中。
这是控制器:
绑定的“联系人”实例确实包含一个联系人,其中包含一个包含大量电话的电话列表。
public ActionResult Edit([Bind()] Contact contact) {
if (ModelState.IsValid)
{
db.Entry(contact).State = System.Data.Entity.EntityState.Modified;
db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(contact);
}
但此代码仅将 Contact 实例保留在 db 上。电话表仍然是空的。
是否有任何配置可以自动将相关的“电话”数据保存在数据库上,还是必须手动编码?
对于那些感兴趣的人,视图是这样的(简化):
@model SGD.Models.Contact
Name: @Html.EditorFor(model => model.name)
Phones: <div id="phones"></div>
#phones div 用这个带有增量索引的部分填充。
<input name="phones[@index].id" type="hidden" />
<input name="phones[@index].phone_type" />
<input name="phones[@index].phone_number" />
【问题讨论】:
-
请显示您如何在视图中添加/删除手机
-
@octavioccl 我添加了简化的视图代码。但我确信控制器从视图中正确绑定数据。这里的问题只是将其保留在 db 上。
-
您是否调试过您的操作以确保手机带有联系人?
-
@octavioccl 是的。我确定。我调试并观察了这个变量。它包含数据。 imgur.com/a/FchXP(这是真实截图,比上面的简单例子要复杂得多)
标签: c# asp.net asp.net-mvc entity-framework ef-code-first