我是Fluent NHibernate和ORM工具的新手。在这种情况下,我不确定我应该从这个工具中得到什么。我有基金,持有和资产表与相应的对象。基金对象有一个控股集合,每个持有一个资产。当我保存基金时,我希望后续的资产和资产也能保存。
我似乎发生了这种情况,但是,我似乎试图在每个表中插入一条新记录而不是更新现有记录。我在db中有唯一的约束,因此保存失败。我是否需要查询现有的资产和资产才能让他们更新?
我确信这个问题已经有了答案,但我无法弄清楚如何搜索找到它。
提前致谢。下面的相关映射
public FundMap()
{
...
HasMany(x => x._holdings)
.Cascade.All();
}
public HoldingMap()
{
...
References(x => x._fund);
References(x => x._asset).Cascade.SaveUpdate();
...
}
答案 0 :(得分:1)
您不需要查询现有的集合,这不是必需的。您可以创建一个新对象并为其提供与数据库中对象相同的密钥,调用SaveOrUpdate()并更新数据库。
您通常查询数据库的原因是您搜索除键以外的其他条件。这也会抓取与此实体关联的关系对象。在你的情况下,一个“基金”有很多“控股”。
例如, 如果您在数据库中有一个现有的基金,其密钥为1,并且与基金相关联的控股,并且该持有的关键字为1,则可以执行以下操作
var fund = new Fund{
ID = 1,
Name = "YourNewName",
Holdings = new List<Holding>{
new Holding{
ID = 1
Description = "NewHoldingDescription"
}
}
}
//and then perform a SaveOrUpdate() on the fund, it should update the entries in the database