是否可以使用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时,我得到了一个强制转换异常。
发布于 2010-01-02 20:10:16
目前,这在约定中是不可能的。如果希望自动映射程序在默认情况下将集合视为集合,请使用ISet而不是ICollection。
发布于 2011-01-25 03:40:14
为了响应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();您需要为每个需要覆盖的实体创建一个新的覆盖类,但这主要是一个复制和粘贴事件。
https://stackoverflow.com/questions/1990593
复制相似问题