1

我在使用 Fluent NHibernate 时遇到了一对多关系的问题。我已经阅读了以下问题,但我认为我的情况比这更简单,所以也许我可以避免实现 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 的情况下进行映射?

提前致谢!

4

1 回答 1

-4

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

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; }

希望这会有所帮助。

于 2012-12-31T14:53:53.177 回答