我有一个带有一些继承的模型,它在数据库上使用nhibernate来持久化。使用流畅的nhibernate的nhibernate映射工作正常,但我有一个场景,我需要为现有父级保存一个孩子。我的模型看起来像这样:
public class Item
{
public long Id { get; set; }
public string Name { get; set; }
// other properties
}
public class ItemCommercial : Item
{
public decimal Value { get; set; }
// other properties
}
在我的数据库中,各个表由Id <-> Id
(每个一个)相关联。
我想知道,如何为数据库中的现有ItemCommercial
保存一个Item
实例。我有项目的ID,但我不知道怎么说nhibernate只说孩子,而是创建一个新项目,样本:
session.Save(itemCommercialObj); // will create a Item and ItemCommercial with the same Id
谢谢。
答案 0 :(得分:0)
你不能像这样的对象的运行时类型因此NH不支持它。将设计更改为
public class Item
{
public long Id { get; set; }
public string Name { get; set; }
public CommercialValue CommercialValue { get; set; }
// other properties
}
public class CommercialValue
{
public Item Item { get; set; }
public decimal Value { get; set; }
// other properties
}
和一对一的映射。然后就像设置CommercialValue属性一样简单
答案 1 :(得分:0)
不,不可能将已经持久化的对象“升级”到其子类。 Nhibernate根本不支持这个。 如果您使用与基类相同的ID来保护子类,则Nhibernate只需创建一个具有该对象的新ID的副本,而不是创建对Member的引用...
所以基本上你可以做任何一次