我对Fluent NHibernate有什么期望?

时间:2011-08-30 04:35:00

标签: c# nhibernate fluent-nhibernate

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

我似乎发生了这种情况,但是,我似乎试图在每个表中插入一条新记录而不是更新现有记录。我在db中有唯一的约束,因此保存失败。我是否需要查询现有的资产和资产才能让他们更新?

我确信这个问题已经有了答案,但我无法弄清楚如何搜索找到它。

提前致谢。下面的相关映射

public FundMap() 
{
...
HasMany(x => x._holdings)
    .Cascade.All();
}

public HoldingMap()
{
...
References(x => x._fund);
References(x => x._asset).Cascade.SaveUpdate();
...
}

1 个答案:

答案 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