【问题标题】:Persisting simple tree with (Fluent-)NHibernate leads to System.InvalidCastException使用 (Fluent-)NHibernate 持久化简单树会导致 System.InvalidCastException
【发布时间】:2010-12-29 20:05:37
【问题描述】:

递归数据结构和 (Fluent-)NHibernate 似乎存在问题,或者只是我,完全是个白痴……

这是树:

公共类 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);
    }
}

}

映射:

公共类 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

【问题讨论】:

    标签: c# nhibernate fluent-nhibernate recursion mono


    【解决方案1】:

    为了记录:我通过用“ChildReferences”关系替换“ChildReferences”关系来掩盖问题,将实际的“Children”保留为瞬态(这些是通过“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; }
        }  
    

    ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多