从List“Custom类型未实现UserCollectionType”继承的类的Fluent NHibernate映射

时间:2012-12-26 20:02:02

标签: fluent-nhibernate fluent-nhibernate-mapping

我遇到使用Fluent NHibernate的One To Many关系问题。我已经阅读了以下question但我认为我的情况比这简单,所以也许我可以避免实现IUserCollectionType。

我有一个项目,一个项目有ProductBacklog。 ProductBacklog是UserStory的列表。

public class Project
{
    public virtual int Id { get; set; }

    public virtual ProductBacklog Backlog { get; protected set; }
}

public class ProductBacklog : List<UserStory>
{
}

当我尝试映射时:

public class ProjectMapping : ClassMap<Project>
{
    public ProjectMapping()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        HasMany(x => x.Backlog).KeyColumn("ProjectId");
    }
}

我收到以下错误:

  

NHibernate.MappingException:自定义类型未实现UserCollectionType:ScrumBoard.Domain.ProductBacklog

如果Project.Backlog是List而不是ProductBacklog类型,它将起作用:

public class Project
{
    public virtual int Id { get; set; }

    public virtual List<UserStory> Backlog { get; protected set; }
}

有没有办法告诉Fluent NHibernate如何在不实现IUserCollectionType的情况下进行映射?

提前致谢!

1 个答案:

答案 0 :(得分:-2)

我认为你混淆了记录集和单个记录之间的区别。

This is creating a reference to a single record of type ProductBacklog.
public virtual ProductBacklog Backlog { get; protected set; } 

Where this is creating a collection of records.
public virtual List<UserStory> Backlog { get; protected set; }

要做你想做的事,请尝试以下方法:

public class Project
{
    public virtual int Id { get; set; }

    public virtual List<ProductBacklog> Backlog { get; set; }
}

public class ProductBacklog : UserStory
{
}

但是,您最好的行动方案可能是您已经发现的以下内容:

public virtual List<UserStory> Backlog { get; set; }

希望这有帮助。