c# - 将整数列表映射到 nHibernate 实体

标签 c# asp.net nhibernate fluent-nhibernate

所以,我有一个 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/

相关文章:

c# - EntityFramework Include (Eager Load) 虚拟属性的虚拟属性

nhibernate - 在这种情况下,为什么 NHibernate 在 ISession.Refresh 期间抛出 "GenericADOException : could not initialize a collection"异常?

c# - 多个 worker 同时触发重复工作

c# - 如何使用 itext7 在固定矩形内缩放文本?

ASP.NET MVC - 发布具有不同数据类型的自定义字段的表单

c# - 流畅的nhibernate级联删除到已连接子类的集合

c# - 线程,流畅的 nhibernate 和保存数据陷入僵局

c# - 为什么我不能有一个从内部类继承的公共(public)类?

c# - 无法将类型为 'System.__ComObject' 的 Com 对象转换为接口(interface)类型 VsRunningDocumentTable4

asp.net - var chat中的对象未定义错误= $ .connection.chat;在使用SignalR时