Это сводит меня с ума.Я могу получить одну из коллекций для сохранения в классе, но не в другой.
У меня есть класс с именем Category
public Category()
{
Items = new List<Item>();
Prices = new List<Price>();
}
, который имеет эти два метода, которые в значительной степениидентичны.Конструкторы устанавливают свойство с именем Category
и их Name
и Price
соответственно.
public virtual Item AddItem(string name)
{
var item = new Item(this, name);
Items.Add(item);
return item;
}
public virtual Price AddPrice(decimal price)
{
var price = new Price(this, price);
Prices.Add(price);
return price;
}
Отображения
public class CategoryMap : ClassMap<Category>
{
public CategoryMap()
{
// Other properties
HasMany(x=>x.Items).Cascade.AllDeleteOrphan();
HasMany(x=>x.Prices).Cascade.AllDeleteOrphan();
}
}
Как видите, две коллекции отображаются наточно так же.
Карты для Price
и Item
имеют одинаковое отображение
References(x=>x.Category);
Насколько я могу судить, почти все в этих двух идентичны.Вот проблема
category.AddItem(someName);
session.Save(category); // Works
category.AddPrice(somePrice);
session.Save(category); // Doesn't work
Они находятся в файле, который я использую для заполнения тестовой базы данных.Сохранение элемента работает нормально.Сохранение цены не дает.Классы и отображения идентичны.Я не могу понять.
Отображения должны работать нормально, так как вызов конструктора напрямую работает
session.Save(new Price(category, 1));
Так почему Category сохраняет одну коллекцию, а не другую?Я запустил профилировщик, и класс даже не пытается сохранить коллекцию Price.
Обновление:
Как отметил Гейб в комментарии, если я поменяю местами вызовы, чтобы Price была вызванадо Item цена входит в базу данных, а Item нет.
Если после каждого обновления коллекции я звоню session.Flush()
, она работает нормально.Должен ли я это делать или есть способ исправить мое отображение, чтобы оно работало?