题
<强>实体强>
我们有其使用NHibernate加载的实体称为产品。
产品具有类别,它的NHibernate愉快地填充我。
<强>数据库强>
在数据库中,产品具有用于类别的外键。
<强>方案强>
用户编辑这个产品(经由web接口),并选择一个不同的类别(比方说,而不是“鱼”我们选择“素食”)。
这可能是一个下拉列表中,与示出的每个类别。当他们选择不同的类别,我们得到一个int键。
<强>问题强>
显然,我们现在要更改保存到产品,但实际上唯一的变化是保存新的int(比如说2,而不是1)。
所以我们检索现有的产品,现在问题来了。
我们不会对产品a“类别ID”字段,我们只有一个类别属性。
但是,我们真的不希望检索类别(按id)刚刚将其分配到产品。
所以我想我想知道的是,我们应该......
a)一种类别ID属性添加到产品
B)创建一个新的类别,分配给它的相关标识,并附上产品(但肯定会导致错误,或覆盖现有类别)
c)中检索(查找)从系统(由ID的类别)并附加到商品
d)做完全是另一回事!
解决方案
更新:Session.Load是正确答案
product.Category = session.Load<Category>(2);
session.Save(product);
其他提示
看起来你可能能够使用Session.Load(ID)功能。
Session.Load是直到请求,在该点它加载另一个属性,返回的代理与该ID的特殊方法。如果没有项目相匹配的ID,它抛出一个错误。尝试是这样的:
product.Category = Session.Load<Category>(2); //2 being the new category ID
Session.SaveOrUpdate(product);
我只是做了一个小测试,它似乎并没有给拉了回来,整个类别。
使用NH的EnumStringType<T>
到您的类别映射为一个枚举到相应的数据库值(其可以是字符串或数字)。你会发现相当多的用法示例,如果谷歌吧。
HTH!
不隶属于 StackOverflow