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

Fluent nhibernate 是否可以使用Fluent NHibernate约定将所有ICollection映射为集合?,fluent-nhibernate,hashset,automapping,Fluent Nhibernate,Hashset,Automapping,是否可以使用Fluent NHibernate约定将所有ICollection映射为集合?我有一个这样的实体: public class NoahsArk { public virtual ICollection<Animal> Animals { get; set; } public NoahsArk() { Animals = new HashSet<Animal>(); } } 使用fluent映射,该属性将映射为

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

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

    public NoahsArk()
    {
        Animals = new HashSet<Animal>();
    }
}
使用fluent映射,该属性将映射为HasManyx=>x.anivers.AsSet,但如何使用我希望与automapper一起使用的约定来实现这一点


我应该补充一点,默认情况下,ICollections作为ILists持久化,当它尝试将哈希集强制转换为IList时,我会得到一个强制转换异常。

这在当前的约定中是不可能的。如果希望自动映射器在默认情况下将集合视为集合,请使用ISet而不是ICollection。

作为响应,您必须创建一个实现IAutoMappingOverride的新类:

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

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

对于每个需要重写的实体,您都需要一个新的重写类,但这主要是一个复制粘贴事件。

谢谢,我感觉情况就是这样。不幸的是,System.Collections.Generic.HashSet直接实现ICollection,并且没有ISet,因此它要么返回列表,要么将Iesi.Collections.ISet与HashedSet一起使用,但这样会将您耦合到Iesi。您已经通过使用NHibernate耦合到Iesi.Collections。
Fluently.Configure()
    .Database(...)
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
        .UseOverridesFromAssemblyOf<Album>()))
    .BuildConfiguration();