所以,我有一个 NHibernate 实体,它有一个关联列表,如下所示:
public class CountSet{
//Some other code here
private readonly IList<int> _instanceCounts;
public virtual IEnumerable<int> InstanceCounts
{
get { return _instanceCounts; }
set
{
_instanceCounts.Clear();
foreach (var instanceCount in value.Distinct())
{
_instanceCounts.Add(instanceCount);
}
}
}
}
并且正在使用 Fluent NHibernate 映射实体,使用自动映射,但使用覆盖来映射列表,如下所示:
mapping.HasMany(x => x.InstanceCounts)
.Table(@"CountSetsInstanceCounts")
.KeyColumn(@"InstanceCountSetId")
.Element(@"InstanceCount");
这似乎正确地创建了 hbm xml,如下所示:
<bag table="CountSetsInstanceCounts" name="InstanceCounts"
access="field.camelcase-underscore" inverse="true"
cascade="all-delete-orphan">
<key>
<column name="InstanceCountSetId"/>
</key>
<element type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, ">
<column name="InstanceCount"/>
</element>
</bag>
这对我来说是正确的。但是,当我尝试将这些实体保存到数据库时,实体被正确保存,但集合却没有。
关于可能发生的事情有什么建议吗?欢迎随时询问更多信息。
最佳答案
你快到了。您的映射是正确的,C# 实体也是如此。关键是,int 不能通过“反向”设置进行管理,因为它不是一个实体。它必须设置为 inverse="false"
。
以这种方式调整您的映射:
mapping.HasMany(x => x.InstanceCounts)
.Table(@"CountSetsInstanceCounts")
.KeyColumn(@"InstanceCountSetId")
.Element(@"InstanceCount")
.Not.Inverse()
;
关于c# - 将整数列表映射到 nHibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709273/