是否可以使用Fluent NHibernate约定将所有ICollections映射为集合?

时间:2010-01-02 04:21:07

标签: fluent-nhibernate hashset automapping

是否可以使用Fluent NHibernate约定将所有ICollections映射为集合?我有一个这样的实体:

public class NoahsArk
{
    public virtual ICollection<Animal> Animals { get; set; }

    public NoahsArk()
    {
        Animals = new HashSet<Animal>();
    }
}

使用流畅的映射,此属性将映射为HasMany(x => x.Animals).AsSet(),但是如何使用我想要与automapper一起使用的约定来执行此操作?

我应该添加,默认情况下,ICollections会保持为ILists,并且在尝试将HashSet转换为IList时会收到强制转换异常。

2 个答案:

答案 0 :(得分:0)

目前,这在公约中是不可能的。如果您希望automapper默认将集合视为集合,请使用ISet代替ICollection

答案 1 :(得分:0)

在回复Christina's question时,您必须创建一个实现IAutoMappingOverride<T>的新类:

public class AlbumOverride : IAutoMappingOverride<Album>
{
    public void Override(AutoMapping<Album> mapping)
    {
        mapping.HasMany(x => x.Pictures).AsSet().Inverse();
    }
}

然后告诉FNH在配置中使用它:

Fluently.Configure()
    .Database(...)
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
        .UseOverridesFromAssemblyOf<Album>()))
    .BuildConfiguration();

您需要为您需要覆盖的每个实体使用新的覆盖类,但它主要是复制和粘贴事件。