我有一個項目,我使用EntityFramework Code First來管理數據庫。 是我使用這個該機型如下:如何在EntityFramework中引用另一個模型列表的模型映射代碼優先
[Table("Data")]
public class Data
{
[Key, Column("Id")]
public int Id { get; set; }
[Column("Code")]
public string Code { get; set; }
[Column("Name")]
public string Name { get; set; }
[Column("Description")]
public string Description { get; set; }
public virtual List<DataAttribute> Attributes { get; set; }
}
和
[Table("DataAttribute")]
public class DataAttribute
{
[Key, Column("Id")]
public int Id { get; set; }
[Column("IdData"), ForeignKey("Data")]
public int IdData { get; set; }
[Column("Name")]
public string Name { get; set; }
[Column("Description")]
public string Description { get; set; }
public virtual Data Data { get; set; }
}
我與此遇到的問題是,當我嘗試編輯一個數據對象(及其相關的一起DataAttribute值)。使用Data元素和DataAttribute元素提交表單時,我沒有正確映射它。我舉一個.cshtml文件的例子。
@model MVCTestApp.Models.Data
@{
ViewBag.Title = "Edit";
}
@section Scripts {
<script type="text/javascript">
$(function() {
$('#new-row').click(function() {
$('table tbody').append(
'<tr>' +
'<td><input class="name" type="text" /></td>' +
'<td><input class="description" type="text" /></td>' +
'<td><a class="delete" href="#">Delete</a></td>' +
'</tr>'
);
$('.delete').click(function() {
$(this).parent().parent().remove();
});
});
});
</script>
}
@using (@Html.BeginForm("Edit", "Data", FormMethod.Post)) {
@Html.HiddenFor(a => a.Id)
Name:
<br />
@Html.TextBoxFor(a => a.Name)
<br />
Description:
<br />
@Html.TextBoxFor(a => a.Description)
<br />
Code:
<br />
@Html.TextBoxFor(a => a.Code)
<br />
<table>
<thead>
<tr>
<th>
Name
</th>
<th>
Description
</th>
<th>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<a id="new-row" href="#">New Row</a>
</td>
<td colspan="2">
</td>
</tr>
@if (Model != null) {
foreach (var item in Model.Attributes) {
<tr>
@Html.HiddenFor(b => item.Id)
@Html.HiddenFor(b => item.IdData)
<td class="name">@Html.TextBoxFor(b => item.Name)
</td>
<td class="description">@Html.TextBoxFor(b => item.Description)
</td>
<td>
<a class="delete" href="#">Delete</a>
</td>
</tr>
}
}
</tbody>
</table>
<input type="submit" value="submit" />
}
問題是這樣的。
如何讓EntityFramework在發佈時識別控制器上的DataAttributes列表?
下面是我現在使用的代碼。
[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Data model)
{
if (model != null) {
db.Data.Add(model); //model has the model.Attributes list set as null
db.SaveChanges();
return View("Index", db.Data.OrderBy(a => a.Id).ToList());
}
return View();
}
在此先感謝您。
您需要確保列表中的序列化,當你發送回控制器。您也可以嘗試設置返回的包含列表的特定ViewModel。 – Nomad101 2013-04-30 00:49:36
我會如何序列化它?通過使它成爲一個json對象或類似的東西,然後將它傳遞給控制器? – triangulito 2013-04-30 00:50:51
這可以很容易地工作,我會做的是向ActionResult添加一個參數,並將其設置爲字符串並使用內置的json解析器來獲取值並設置模型屬性。您可以在客戶端上使用JSON序列化要發回的對象。 – Nomad101 2013-04-30 00:53:56