我正在开发一个使用jqgrid和webapi,Entity Framework 5和ASPNET MVC 4的项目。 WebApi控制器工作正常,我可以通过测试进行CRUD操作。
现在,我正在使用jqgrid开发UI。我的问题来自一对多的关系。
我有这两个实体:
public class Door
{
public int Id { get; set; }
public string Description { get; set; }
public int HouseId { get; set; }
[JsonIgnore]
public House House { get; set; }
}
和这一个
public class House
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Door> Doors { get; set; }
}
我在jqgrid中的jqgrid colmode代码就是这个:
colModel: [
{ name: 'Id', index: 'id', editable: true, sortable: true, hidden: false, align: 'left' },
{ name: 'Description', index: 'description', editable: true, sortable: true, hidden: false, align: 'left' },
{
name: 'HouseId', index: 'HouseId', editable: true, sortable: true, hidden: false, align: 'left',
edittype: "select", editrules: { required: true }, editoptions: {
dataUrl: $("#ServiceUrlHouse").val(),
buildSelect: function (data) {
var response = jQuery.parseJSON(data);
var html = '<select>';
if (response && response.length) {
for (var i = 0, l = response.length; i < l ; i++) {
var item = response[i];
html += '<option value="' + item.Id + '">' + item.Name + '</option>';
}
}
return html + "</select>";
}
}
}
我的问题是,我希望在网格处于查看模式时显示House名称,并在编辑模式下选择(组合),然后发送回WebApi原始门以在数据库中更新。 / p>
注1:如果我不放[JsonIgnore]我会自我引用循环
注意2 我虽然创建了像这样的DTO:
public class DoorDto
{
public int Id { get; set; }
public string Description { get; set; }
public int HouseId { get; set; }
public string HouseName { get; set; }
}
问题是我需要修改jqgrid部件代码并使用HouseName更改HouseId列名称(如果我这样做,我可以在查看模式中看到House的名称=&gt;那没关系)。但是,当我编辑任何记录时,返回webapi的json不发送Door对象,它发送DoorDto,然后Entity Framework 5的更新失败。
我知道我可以创建另一个收到DoorDto的方法,但它会很脏。有没有最好的方法来解决这个问题?
提前致谢!吉列尔莫。