Сохранить родительский элемент с дочерними элементами в одном запросе (дочерние элементы имеют ссылку на нулевое значение для родительского элемента)

#c# #nhibernate #fluent-nhibernate #mapping

#c# #nhibernate #свободно-nhibernate #сопоставление

Вопрос:

Добрый день. Я не могу сохранить родительский элемент с дочерними элементами в одном запросе. Но дочерние элементы имеют нулевую ссылку для родительского элемента… Родительским элементом в моей БД является таблица «food_in_the_cart», а модель для нее находится здесь:

     public class FoodInTheCartModel
    {
        public virtual int ID { get; set; }
        public virtual ClientModel Client { get; set; }
        public virtual EstablishmentModel Stocked { get; set; }
        public virtual ProductModel DesirableProduct { get; set; }
        public virtual IList<CartAdditiveModel> Additives { get; set; } //children
        public virtual void AddAdditivesToTheCart(CartAdditiveModel a)
        {
            a.Cart = this;
            Additives.Add(a);
        }
        public FoodInTheCartModel()
        {
            this.Additives = new List<CartAdditiveModel>();
        }
    }
  

Сопоставление также:

 public FoodInTheCartMap()
{
    Table("food_in_the_cart");

    Id(x => x.ID)
        .Column("id")
        .GeneratedBy.Native("food_in_the_cart_id_seq");

    References(x => x.Client)
        .Column("fk_id_client")
        .Not.Nullable()
        .Not.LazyLoad();

    References(x => x.DesirableProduct)
        .Column("fk_id_product")
        .Not.Nullable()
        .Not.LazyLoad();

    References(x => x.Stocked)
        .Column("fk_id_stock")


 .Not.Nullable()
            .Not.LazyLoad();

        HasMany(x => x.Additives)
            .Table("cart_additive")
            .Cascade.SaveUpdate()
            .Cascade.All()
            .Inverse()              
            .Not.LazyLoad();
    }
  

А дочерний элемент — это cart_additive . Модель cart_additive является типом CartAdditive и имеет ссылку на модель food_in_the_cart, также сопоставляя эту ссылку:

         References(x => x.Cart)
            .Column("fk_id_cart")                                      
            .Not.LazyLoad();
  

Тип отношения между этими двумя таблицами — один ко многим: food_in_the_cart имеет много cart_additive . Кажется, я перепробовал все для сохранения запроса для родительского элемента с дочерними элементами… Но дочерние элементы по-прежнему имеют нулевое значение для родительского элемента. Как сделать родительскую ссылку в дочернем элементе не нулевой?

Ответ №1:

Я удалил Insert() из has many в FoodInTheCartMap и добавил туда AsBug(), также допустил нулевые значения для fk food_in_the_cart в cart_additives как для ссылки, называемой Cart в модели для этой таблицы. Все работает таким образом. Ура.