首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用Fluent NHibernate约定将所有ICollections映射为集合?

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

Stack Overflow用户
提问于 2010-01-02 12:21:07
回答 2查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
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时,我得到了一个强制转换异常。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-02 20:10:16

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

票数 0
EN

Stack Overflow用户

发布于 2011-01-25 03:40:14

为了响应Christina's question,您必须创建一个实现IAutoMappingOverride<T>的新类

代码语言:javascript
复制
public class AlbumOverride : IAutoMappingOverride<Album>
{
    public void Override(AutoMapping<Album> mapping)
    {
        mapping.HasMany(x => x.Pictures).AsSet().Inverse();
    }
}

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

代码语言:javascript
复制
Fluently.Configure()
    .Database(...)
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assemblies(...)
        .UseOverridesFromAssemblyOf<Album>()))
    .BuildConfiguration();

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1990593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档