1

私は 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 を受け取った別のメソッドを作成できることはわかっていますが、それは汚いでしょう。これを処理する最善の方法はありますか?

前もって感謝します!ギレルモ。

4

0 に答える 0