gpt4 book ai didi

c# - 使用 (Fluent-)NHibernate 持久化简单树会导致 System.InvalidCastException

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:07 24 4
gpt4 key购买 nike

递归数据结构和 (Fluent-)NHibernate 似乎有问题,或者只有我,是一个彻头彻尾的白痴...

这是树:

公共(public)类 SimpleNode {

public SimpleNode ()
{
this.Children = new List<SimpleNode> ();
}

public virtual SimpleNode Parent { get; private set; }
public virtual List<SimpleNode> Children { get; private set; }

public virtual void setParent (SimpleNode parent)
{
parent.AddChild (this);
Parent = parent;
}

public virtual void AddChild (SimpleNode child)
{
this.Children.Add (child);
}

public virtual void AddChildren (IEnumerable<SimpleNode> children)
{
foreach (var child in children) {
AddChild (child);
}
}

映射:

公共(public)类 SimpleNodeEntity : ClassMap

{

public SimpleNodeEntity ()
{
Id (x => x.Id);

References (x => x.Parent).Nullable ();

HasMany (x => x.Children).Not.LazyLoad ().Inverse ().Cascade.All ().KeyNullable ();
}

现在,每当我尝试保存一个节点时,我都会得到:

System.InvalidCastException:无法从源类型转换为目标类型。在(包装器动态方法)SimpleNode。 (object,object[],NHibernate.Bytecode.Lightweight.SetterCallback) 在 NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues (object,object[]) 在 NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer (object,object[])

我的设置:

Mono 2.8.1(在 OSX 上)、NHibernate 2.1.2、FluentNHibernate 1.1.0

最佳答案

郑重声明:我通过用“ChildReferences”关系替换“Children”关系来解决问题,将实际的“Children”保留为 transient (这些是通过“ChildReferences”间接构建的):

...

public virtual IList&lt;ChildReference&gt; ChildReferences { get; private set; }

...

在映射中:

HasMany (x => x.ChildReferences).Cascade.All ();

public class ChildReference
{
public virtual int ChildId { get; set; }
}

...

关于c# - 使用 (Fluent-)NHibernate 持久化简单树会导致 System.InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4557419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com