<强>实体

我们有其使用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!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top