Entity Framework: обновление связанных сущностей - PullRequest
3 голосов
/ 23 декабря 2011

У меня есть две сущности: Invoice и InvoiceDetail.

У Invoice есть член InvoiceDetails.

Когда я создаю объект, он работает как положено.

Каркас вставляетInvoice и строки InvoiceDetail в базе данных.

$.ajax({
    url: "/Invoices/Index",
    data: JSON.stringify({
        InvoiceDetails: [{
            Description: "1"
        }, {
            Description: "2"
        }]
    }),
    contentType: "application/json",
    type: "POST"
});

    [ActionName("Index")]
    [HttpPost]
    public JsonResult Post(Invoice invoice)
    {
        db.Invoices.AddObject(invoice);
        db.SaveChanges();
        ...

Я также хотел бы обновить Invoice и связанные InvoiceDetails.

$.ajax({
    url: "/Invoices/Index/1",
    data: JSON.stringify({
        Id: 1,
        InvoiceDetails: [{
            Id: 1,
            Description: "1*"
        }, {
            Id: 2,
            Description: "2*"
        }]
    }),
    contentType: "application/json",
    type: "PUT"
});

    [ActionName("Index")]
    [HttpPut]
    public JsonResult Put(Invoice invoice)
    {
        db.Invoices.Attach(invoice);
        db.ObjectStateManager.ChangeObjectState(invoice, EntityState.Modified);
        db.SaveChanges();
        ...

Но платформа обновляет только счет-фактуру.

Как обновить также связанные сущности?

Моя модель выглядит следующим образом

enter image description here

РЕДАКТИРОВАТЬ: решение http://michele.berto.li/update-of-an-object-and-related-records-with-backbonejs-and-net-mvc

ОБНОВЛЕННАЯ ССЫЛКА http://michele.berto.li/update-of-an-object-and-related-records-with-backbone-js-and-net-mvc/

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Когда вы звоните ChangeObjectState, вы меняете состояние одного объекта, отношения остаются в неизменном состоянии.Поэтому, если вы изменяете только существующие детали счета-фактуры, вы можете просто перебрать эти данные и установить для них также измененные состояния.Если вы также можете добавлять или удалять детали, это будет намного сложнее , и вам придется вручную синхронизировать состояние из запроса с состоянием в базе данных (сначала необходимо загрузить счет-фактуру с деталями из базы данных, как предложил @Hammerstein), либоиспользуйте некоторые соглашения, чтобы найти, какие детали должны быть установлены в удаленное или добавленное состояние, не проверяя их в базе данных.

0 голосов
/ 23 декабря 2011

Я не много работал с Attach, обычно я запрашиваю базу данных, обновляю запись и сохраняю изменения. Но я полагаю, что накладная, которую вы прикрепляете, не имеет такой же связи с деталями накладной. Вам нужно будет извлечь эту запись, обновить ее и затем сохранить изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...