我能从Fluent NHibernate中得到什么?

本文关键字:什么 NHibernate Fluent | 更新日期: 2023-09-27 18:06:54

一般来说,我是Fluent NHibernate和ORM工具的新手。我不太确定在这种情况下我应该从这个工具中得到什么。我有基金,控股和资产表与相应的对象。基金对象有一个控股的集合,每个控股都有一个资产。当我把基金存起来时,我希望以后的持股和资产也能存起来。

我似乎有这种情况发生,然而,我似乎试图插入一个新的记录到每个表,而不是更新现有的。我在数据库中有唯一的约束,所以保存失败。我是否需要查询现有的持有和资产来更新它们?

我确信这个问题已经有了答案,但是我不知道如何去寻找它。

提前感谢。

下面的相关映射
public FundMap() 
{
...
HasMany(x => x._holdings)
    .Cascade.All();
}
public HoldingMap()
{
...
References(x => x._fund);
References(x => x._asset).Cascade.SaveUpdate();
...
}

我能从Fluent NHibernate中得到什么?

您不需要查询现有的集合,这不是必需的。你可以创建一个新对象,并给它与数据库中对象相同的键,调用SaveOrUpdate(),它将更新数据库。

您通常查询数据库的原因是因为您在键以外的其他条件下进行搜索。这还会获取与该实体关联的关系对象。在你的例子中,一个"基金"拥有许多"持股"。

例如,

如果数据库中有一个键为1的现有基金和一个与该基金相关联的Holding,并且该特定的Holding的键为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