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

Hom*_*0ar 5 collections nhibernate-mapping fluent-nhibernate

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

IList<EnumType> lst;
Run Code Online (Sandbox Code Playgroud)

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

谢谢,莱昂纳多

Tri*_*ran 5

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

HasMany(x => x.Collection)
    .Table("TableName")
    .KeyColumn("KeyColumnName")
    .Element("ValueColumnName");
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • 集合:值类型的集合(可能是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");
    }
}
Run Code Online (Sandbox Code Playgroud)

此映射的结果将生成四 (4) 个表。

  1. 一列 ID 为 int 的表实体。
  2. 包含两列的表 Entity_String - EntityId : int、String : varchar 和一个外键 EntityId 到 Entity 表 Id 列。
  3. ...同样,除了列是 int 类型。
  4. ...同样,除了列是日期时间类型。


Spi*_*ynn 2

HasMany(x => x.Items) .Table("tbl") .KeyColumn("fk") .Element("eCol") .AsBag()