【发布时间】:2018-05-03 08:53:36
【问题描述】:
我有两个非常简单的类,一个是Store类,代码如下
商店
class Store
{
public virtual int StoreID { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Item> ItemID { get; set; }
}
以下是用于存储将要存储在 Store 中的 Items
物品
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 的映射如下
商店地图
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();
}
}
项目地图
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>();
所以我的问题是我应该如何查询和保存才能获得尽可能少的代码行并在商店列表中获得这两个项目?
【问题讨论】:
-
需要注意的一点是,另一种方法是将项目添加到商店
Items集合中,然后您只需要保存商店实体(感谢商店中的Cascade.SaveUpdate()项目映射)。 -
你已经正确地使用了
cascade(我确实将所有用于孤儿,但是..)。这意味着,无需在项目上调用会话保存。它们将被持久化.. 只要我们也将它们添加到 Store 的集合中Items -
好的,我已经改变了将
Item元素添加到Store列表的列表。但是当我查询以使用Store s = session.QueryOver<Store>().Where(x => x.StoreID == 1).SingleOrDefault<Store>();获取 Store 元素时,我仍然不能在列表中同时拥有这两个项目
标签: c# sqlite nhibernate fluent-nhibernate queryover