Как сохранить в nhibernate? - PullRequest
       0

Как сохранить в nhibernate?

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

Я запутался в том, как настроить отображение, чтобы все сохранялось, и мне не нужно помещать ссылки на все.

public class TableAMapping : ClassMap<TableA>
    {
        public TableAMapping()
        {
            Id(x => x.Id).GeneratedBy.GuidComb();
            Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize(); ;

            References(x => x.Country).Not.Nullable();
            HasMany(x => x.Bonuses).Cascade.All();
            HasManyToMany(x => x.AvailableFeatures).Cascade.All();
        }
    }

 public class BonusMapping : ClassMap<Bonus>
    {
        public BonusMapping()
        {
            Id(x => x.Id).GeneratedBy.GuidComb();


            Map(x => x.Amount).Not.Nullable().Precision(10).Scale(2);

            References(x => x.BonusType).Not.Nullable();
            References(x => x.TableA).Not.Nullable();

        }
    }

      public class AvailableFeatureMapping : ClassMap<AvailableFeature>
    {
        public AvailableFeatureMapping()
        {
            Id(x => x.Id).GeneratedBy.GuidComb();

            Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize();

            HasManyToMany(x => x.TableAs);

        }
    }

В моем коде я делаю что-то вроде

TableA a = new TableA();
a.Name = "test";
a.Country = session.Load<Country>(1);

foreach(var b in bonuesVm)
{
   Bonus bonus = new Bonus();
   bonus.Amount = b.Amount;
   bonus.BonusType = sesson.Load<BonusType>(b.bonusTypeId);

   a.Bounus.add(bonus);
}

foreach(var avaliable in avaliableVm)
{
   AvaliableFeatures features = new AvaliableFeatures();
   features.Name = avaliable.Name;

   a.AvaliableFeatures.Add(features);
}

session.Save(a);
transaction.Commit();

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

Отображение всегда смущает меня.Я никогда не уверен, нужно ли мне использовать inverse или cascade.SaveUpdate()

с моей текущей настройкой, я получаю эту ошибку

NHibernate.PropertyValueException was unhandled by user code
  Message=not-null property references a null or transient value Framework.Domain.Bonus.TableA
  Source=NHibernate
  EntityName=.Framework.Domain.Bonus
  PropertyName=TableA

Поэтому он хочет, чтобы я поместил ссылку на TableA вБонусный объект.Есть ли далеко, чтобы не делать этого?Или это должно быть сделано несмотря ни на что.Я бы прыгнул, так как он находится в объекте TableA, чтобы он мог понять это.Просто кажется бессмысленным вкладывать TableA в бонус, который уже есть в TableA.

1 Ответ

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

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

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