无法将“NHibernate.Mapping.List”类型的对象强制转换为“NHibernate.Mapping.IKeyValue”类型
试图用流利的NHibernate来描绘一段关系,我得到了这个例外 这些是课程无法将“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; }
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引用。我觉得这很奇怪。