Отображение простой коллекции элементов с помощью Fluent NHibernate - PullRequest
4 голосов
/ 15 января 2010

Я пытаюсь отобразить коллекцию значений enum с помощью Fluent NHibernate.

IList<EnumType> lst;

Я не могу найти никакой документации об этом, но я вполне уверен, что это возможно. У меня не было никаких проблем с отображением коллекции сущностей.

Спасибо, Leonardo

Ответы [ 2 ]

4 голосов
/ 09 октября 2012

Для сопоставления коллекций простых типов значений можно использовать следующую подпись сопоставления 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) таблицы.

  1. Таблица Entity с идентификатором одного столбца из int.
  2. Таблица Entity_String с двумя столбцами - EntityId: int, String: varchar и внешний ключ EntityId для столбца Iid таблицы Entity.
  3. ... аналогично, за исключением того, что столбец имеет тип int.
  4. ... аналогично, за исключением того, что столбец имеет тип datetime.
1 голос
/ 05 июня 2012

HasMany (x => x.Items) .Table ( "TBL") .KeyColumn ( "FK") .Element ( "Ecol") .AsBag ()

...