fluent-nhibernate - 使用 Fluent NHibernate 映射一个简单的元素集合

标签 fluent-nhibernate nhibernate-mapping collections

我正在尝试使用 Fluent NHibernate 映射枚举值的集合。

IList<EnumType> lst;

我找不到任何关于它的文档,但我很确定这应该是可能的。
我对映射实体集合完全没有问题。

谢谢,
莱昂纳多

最佳答案

您可以使用以下 FNH 映射签名来映射简单值类型集合。

HasMany(x => x.Collection)
    .Table("TableName")
    .KeyColumn("KeyColumnName")
    .Element("ValueColumnName");

在哪里:
  • 集合:值类型的集合(可以是 enum 因为它将被映射为 int)。
  • TableName:将存储您的集合值的表的名称。
  • KeyColumnName:将键值存储回父级的列的名称。
  • ValueColumnName :将存储实际值的列的名称。

  • 让我们看一个如何映射几个值类型集合的示例。
    public enum EnumType
    {
        Value1,
        Value2,
        Value3
    }
    
    public class Entity
    {
        /// <summary>
        /// Primary key
        /// </summary>
        public virtual int Id { get; set; }
    
        /// <summary>
        /// Collection of strings
        /// </summary>
        public virtual IList<string> StringCollection { get; set; }
    
        /// <summary>
        /// Collection of enums
        /// </summary>
        public virtual IList<EnumType> EnumCollection { get; set; }
    
        /// <summary>
        /// Collection of dates/times
        /// </summary>
        public virtual IList<DateTime> DateTimeCollection { get; set; }
    }
    
    public class EntityMap : ClassMap<Entity>
    {
        public EntityMap()
        {
            // Map primary key.
            Id(x => x.Id);
    
            // Map value collections
            HasMany(x => x.StringCollection)
                .Table("Entity_String")
                .KeyColumn("EntityId")
                .Element("String");
    
            HasMany(x => x.EnumCollection)
                .Table("Entity_Enum")
                .KeyColumn("EntityId")
                .Element("Enum");
    
            HasMany(x => x.DateTimeCollection)
                .Table("Entity_DateTime")
                .KeyColumn("EntityId")
                .Element("DateTime");
        }
    }
    

    此映射的结果将生成四 (4) 个表。
  • 一列 ID 为 int 的表实体。
  • 包含两列的表 Entity_String - EntityId : int、String : varchar 和一个外键 EntityId 到 Entity 表 Id 列。
  • ...同样,除了列是 int 类型。
  • ...同样,除了列是日期时间类型。
  • 关于fluent-nhibernate - 使用 Fluent NHibernate 映射一个简单的元素集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2073809/

    相关文章:

    java - google guava lib 中 newArrayList(E... elements) 的好奇心

    java - 如何在 Java 中使用带堆栈的迭代器

    java - 在 Java 中将字符串数组转换为 boolean 列表

    .net - 如果更新行每表一个序列,则更新版本字段

    c# - 如何正确实现IUserType?

    sql-server - 流畅的 nhibernate SQL Server 2008 R2 Express 非常长的字符串保存问题

    java - 用于对数据库进行复杂查询的 Hibernate Criteria Class

    nhibernate 自定义集合处理

    NHibernate LINQ : Why is a query using the incorrect char value if I repeat the call?

    c# - 从 NHibernate session 断开对象