0

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

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

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

使用流利的映射,此属性将被映射为HasMany(x => x.Animals).AsSet(),但我将如何使用我想与自动映射器一起使用的约定来做到这一点?

默认情况下,我应该添加它,ICollections将其持久化为ILists,当它尝试将其转换为 时,我会得到一个转换HashSet异常IList

4

2 回答 2

0

目前,这在公约中是不可能的。如果您希望自动映射器默认将您的集合视为集合,请使用ISet而不是ICollection.

于 2010-01-02T12:10:15.933 回答
0

为了回答Christina 的问题,您必须创建一个新类来实现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();

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

于 2011-01-24T19:40:13.630 回答