是否可以使用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
时会收到强制转换异常。
答案 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();
您需要为您需要覆盖的每个实体使用新的覆盖类,但它主要是复制和粘贴事件。