无法将“NHibernate.Mapping.List”类型的对象强制转换为“NHibernate.Mapping.IKeyValue”类型

无法将“NHibernate.Mapping.List”类型的对象强制转换为“NHibernate.Mapping.IKeyValue”类型,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,试图用流利的NHibernate来描绘一段关系,我得到了这个例外 这些是课程 public abstract class TaskContainer : DomainObject { public virtual IList<Task> Tasks { get; set; } } public class Task : TaskContainer { public virtual TaskContainer TaskContainer { get; set; }

试图用流利的NHibernate来描绘一段关系,我得到了这个例外

这些是课程

public abstract class TaskContainer : DomainObject
{
    public virtual IList<Task> Tasks { get; set; }
}

public class Task : TaskContainer
{
    public virtual TaskContainer TaskContainer { get; set; }
    public virtual string Description { get; set; }

    public static Task Get(int id)
    {
        return Get<Task>(id);
    }
}
和映射文件

public class TaskMap : ClassMap<Task>
{
    public TaskMap()
    {
        Id(x => x.Id);
        Map(x => x.Description);
        ReferencesAny(x => x.TaskContainer)
            .EntityIdentifierColumn("TaskContainer_Id")
            .EntityTypeColumn("TaskContainerDiscriminator")
            .IdentityType<int>()
            .AddMetaValue<Task>("Task")
        HasMany(x => x.Tasks)
            .KeyColumn("TaskContainer_Id")
            .PropertyRef("Tasks")
            .AsList();
    }
}

我看到过其他对此错误的引用,但它们与实现List而不是IList有关,我没有这样做。

尝试:.PropertyRefTaskContainer

在哪个类映射中,错误在哪里?这是创建SessionFactory时使用的无效或不完整配置的内部异常。查看潜在原因集合和InnerException以了解更多详细信息,因此我不会得到更多信息。当配置构建在Fluently.Configure调用上时,将抛出它;删除SalesOrder类时仍然会出现异常,因此我们可以假设它与Task/TaskContainer关系相关。我将简化问题以反映这一点。请尝试在TaskClass中的构造函数上初始化IList Tasks属性,因为PropertyRef应指定NHibernate使用TaskContainer的映射ID和类型列,所以您不需要.KeyColumnStaskContainer\u ID当我进行此更改时,我发现异常集合外键映射的列数不正确:CubeNet.Service.DomainObjects.Task.Tasks类型:ObjectI我刚刚注意到FNH创建的用于创建任务表的SQL脚本既包含一个Id列,也包含一个Task_Id列,这看起来像是对同一表PK的FK引用。我觉得这很奇怪。