Обновите родительскую таблицу от child в Asp.net и свободно используйте nhibernate. - PullRequest
0 голосов
/ 13 июля 2010

Я пытаюсь обновить данные в родительской таблице, на которую ссылается дочерняя таблица, из дочернего представления в Asp.net.

Я сопоставил таблицы с помощью Fluent Nhibernate.

В дочерней таблице отображение выглядит так:

public class ChildMap: ClassMap<Child>
{
    public ChildMap()
    {
        Id(i => i.childID).Not.Nullable();
        Map(i => i.childValue1);
        Map(i => i.childValue2);
        Map(i => i.childValue3);
        References(i => i.parent, "parentID").Cascade.All();
    }

Отображение родительской таблицы:

public class ParentMap: ClassMap<Parent>
{
    public ParentMap()
    {
        Id(i => i.parentID).Not.Nullable();
        Map(i => i.parentValue1);
        Map(i => i.parentValue2);
        Map(i => i.parentValue3);
        HasMany(i => i.Child).KeyColumn("childID").Cascade.All().Inverse();

    }
}

В моем контроллере это выглядит так ...

    [HttpPost]
    public ActionResult Edit(int id, FormCollection collection)
    {

        try
        {
            using (var tr = UnitOfWork.CurrentUnitOfWork.BeginTransaction())
            {
                try
                {

                    var child= Registry.Childs.Get(id);

                    //This update works
                    UpdateModel(child, new[] { "childValue1", "childValue2", "childValue3" }, collection.ToValueProvider());

                    //This update on the parent doesn't work
                    UpdateModel(child.parent, new[] { "child.parent.parentValue1", "child.parent.parentValue2", "child.parent.parentValue3" }, collection.ToValueProvider());

                    tr.Commit();
                }
                catch (Exception)
                {
                    tr.Rollback();
                    throw;
                }
            }

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

С кодами выше, когда я пытаюсь обновить значения в дочерней таблице, это работает. Однако, если я пытаюсь сохранить изменения в родительской таблице, это не сработает.

У вас есть идеи, как это исправить?

Спасибо.

1 Ответ

0 голосов
/ 18 июля 2010

Хорошо .. Я только что ответил на свой вопрос.В основном просто добавьте имя таблицы родителя, чтобы оно работало.

UpdateModel(child.parent, "Parent", new[] { "child.parent.parentValue1", "child.parent.parentValue2", "child.parent.parentValue3" }, collection.ToValueProvider());

Yay !!!

...