私は webapi、Entity Framework 5、および ASPNET MVC 4 で jqgrid を使用するプロジェクトに取り組んでいます。WebApi コントローラーは正常に動作しており、テストから CRUD 操作を行うことができます。
現在、jqgrid を使用して UI を開発しています。私の問題は、たとえば1対多の関係にあります。
私はこの2つのエンティティを持っています:
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>";
}
}
}
私の問題は、グリッドが表示モードのときに家の名前を表示し、編集モードのときに選択 (コンボ) してから、元のドアを WebApi に送り返してデータベースで更新することです。
注 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 部分のコードを変更し、HouseId 列名を HouseName に変更する必要があることです (これを行うと、表示モードで家の名前が表示されます => OK)。しかし、レコードを編集すると、webapi に返される json は Door オブジェクトを送信せず、DoorDto を送信し、Entity Framework 5 による更新は失敗します。
DoorDto を受け取った別のメソッドを作成できることはわかっていますが、それは汚いでしょう。これを処理する最善の方法はありますか?
前もって感謝します!ギレルモ。