Как мне настроить nhibernate, чтобы справиться с этим? - PullRequest
0 голосов
/ 01 октября 2011

У меня в настоящее время есть этот код.

                    tableB = new TableB
                    {
                        TableA = tableA,
                    };

                    List<TableC> tableC = locations.Select(location => new TableC
                    {
                        TableB = tableB
                    }).ToList();

                    tableB.TableC = tableC;

                    tableA.TableB.Add(tableB);
nhibernate.Create(a);
nhibernate.Commit();

Приведенный выше код работает, но я нахожу странным, что у меня так получается.

Я хотел бы сделать что-то вроде

  tableB = new TableB
                        {
                            TableA = tableA,
                            TableC = MakeAllTableCs()
                        };

                        tableA.TableB.Add(tableB);
    nhibernate.Create(a);
    nhibernate.Commit();

Коллекция таблиц C создается в памяти, и когда я пытаюсь сделать создание, я получаю

not-null property references a null or transient value

Похоже, что это ссылка на TableB для каждого в коллекции TableC.Кажется странным делать это, видя, что я застрял в объекте TableB.Я бы надеялся, что он понял бы это и использовал бы его в качестве ссылки.

Есть ли в любом случае, что я могу сделать это, поэтому мне не нужно иметь ссылку на TableB в каждом из моих объектов TableC?

Изменить отображение

     public class TableAMap : ClassMap<TableA>
        {
            public TableAMap()
            {

                Id(x => x.Id).GeneratedBy.GuidComb();
                HasMany(x => x.).Cascade.All().Inverse();
            }
        }


 public class TableBMap : ClassMap<TableB>
    {
        public TableBMap ()
        {

            Id(x => x.Id).GeneratedBy.GuidComb();
      References(x => x.TableA).Not.Nullable();
            HasMany(x => x.TableC).Cascade.All().Inverse();

        }

    }

  public class TableCMap : ClassMap<TableC>
    {
        public TableCMap ()
        {
            Id(x => x.Id).GeneratedBy.GuidComb();
           References(x => x.TableB).Not.Nullable();
        }
    }

1 Ответ

0 голосов
/ 03 октября 2011

Трудно сказать без ваших отображений и реального кода NHibernate (где вы звоните session.Save()), но, скорее всего, вы не сохраняете новые TableB объекты, а также не имеете никакого каскадного параметра на TableA.b (вам нужноодин из них).

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