Связь службы данных WCF «многие ко многим» с EF4

Я пишу приложение ASP.NET MVC 2, которое использует Entity Framework 4 и службы данных WCF.

Я хочу манипулировать отношениями «многие ко многим» (составной ключ) между обязанностями и рабочими на основе состояния некоторых флажков.

Работник может иметь ноль или более обязанностей. У Обязанности может быть ноль или более работников.

Этот код взят из одного из моих контроллеров:

//
// POST: /Duty/Edit/5

[HttpPost]
public ActionResult Edit(Duty Model, FormCollection collection)
{
    ctx.AttachTo("Duties", Model);
    ctx.UpdateObject(Model);

    // handle checkboxes
    ctx.LoadProperty(Model, "Workers");
    foreach (Worker w in ctx.Workers)
    {
        bool isChecked = collection[w.Id.ToString()].Contains("t");
        bool wasChecked = Model.Workers.Contains(w);
        if (isChecked && !wasChecked)
        {
            Model.Workers.Add(w);
        }
        else if (wasChecked && !isChecked)
        {
            Model.Workers.Remove(w);
        }
    }

    ctx.SaveChanges();
    return RedirectToAction("Index");
}

Методы Add() и Remove() вызываются соответствующим образом. Это выполняется без исключения. Но изменения не фиксируются в моей базе данных. Почему?

Обновлять

Я пробовал перевернуть его на w.Duties.Add(Model);, и это тоже не работает.


person Zack Peterson    schedule 25.06.2010    source источник


Ответы (1)


Используйте методы AddLink и DeleteLink.

//
// POST: /Duty/Edit/5

[HttpPost]
public ActionResult Edit(Duty Model, FormCollection collection)
{
    ctx.AttachTo("Duties", Model);
    ctx.UpdateObject(Model);

    // handle checkboxes
    foreach (Worker w in ctx.Workers.Expand("Duties"))
    {
        bool isChecked = collection[w.Id.ToString()].Contains("t");
        bool wasChecked = w.Duties.Contains(Model);
        if (isChecked && !wasChecked)
        {
            ctx.AddLink(Model, "Workers", w);
        }
        else if (wasChecked && !isChecked)
        {
            ctx.DeleteLink(Model, "Workers", w);
        }
    }

    ctx.SaveChanges();
    return RedirectToAction("Index");
}

См. раздел Создание и изменение ссылок отношений в статье MSDN Обновление служба данных (службы данных WCF)

person Zack Peterson    schedule 25.06.2010