У меня есть два очень простых класса, один из которых является классом Store, который закодирован следующим образом
Магазин
class Store
{
public virtual int StoreID { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Item> ItemID { get; set; }
}
И следующее для хранения предметов, которые будут храниться в магазине
Пункт
class Item
{
public virtual int ItemID { get; set; }
public virtual string Name { get; set; }
public virtual double Price { get; set; }
public virtual int Quantity { get; set; }
public virtual Store StoreID { get; set; }
}
Отображения с Fluent Nhiberate следующие
StoreMap
class StoreMap : ClassMap<Store>
{
public StoreMap()
{
Id(x => x.StoreID).Column("idStore").GeneratedBy.Assigned();
Map(x => x.Name).Column("Name").Not.Nullable();
HasMany(x => x.ItemID).KeyColumn("idItem").Inverse().Table("Item").AsSet().Cascade.SaveUpdate();
}
}
ItemMap
class ItemMap : ClassMap<Item>
{
public ItemMap()
{
Id(x => x.ItemID).Column("idItem").GeneratedBy.Assigned();
Map(x => x.Name).Column("Name").Not.Nullable();
Map(x => x.Price).Column("Price").Default("0");
Map(x => x.Quantity).Column("Quantity").Default("0");
References(x => x.StoreID).Column("idStore");
}
}
Теперь, когда я хочу сохранить два предмета и новый магазин, я делаю это следующим образом, но я не знаю, существует ли простой / лучший способ сделать это
Store s = new Store{...}
Item i1 = new Item {
Name = "Item 1",
ItemID = 1,
Price = 100,
Quantity = 1,
StoreID = s
};
Item i2 = new Item {
Name = "Item 2",
ItemID = 2,
Price = 100,
Quantity = 1,
StoreID = s
};
trans = session.BeginTransaction();
session.SaveOrUpdate(s);
session.SaveOrUpdate(i2);
session.SaveOrUpdate(i1);
//Commit changes
trans.Commit();
session.Flush();
session.Close();
И когда я запрашиваю все данные из магазина, в списке предметов отображается только первый элемент ...
Store s = session.QueryOver<Store>().Where(x => x.StoreID == 1).SingleOrDefault<Store>();
Итак, мой вопрос: как мне запросить и сохранить, чтобы получить как можно меньше строк кода и получить оба товара в списке магазина?