Для сопоставления коллекций простых типов значений можно использовать следующую подпись сопоставления 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) таблицы.
- Таблица Entity с идентификатором одного столбца из int.
- Таблица Entity_String с двумя столбцами - EntityId: int, String: varchar и внешний ключ EntityId для столбца Iid таблицы Entity.
- ... аналогично, за исключением того, что столбец имеет тип int.
- ... аналогично, за исключением того, что столбец имеет тип datetime.