我正在用 2 个类编写一个非常简单的案例:Parent 和 Child。父母有 n 个孩子,孩子有 1 个父母。我在它们之间建立了双向关系。
我试图向我的父母添加一个业务规则,该规则检查孩子的父母和处理呼叫的实例之间的相等性。当它应该返回真时它返回假。所以我简化了一切以找到问题的根源。所以我在 POCO 之外测试了相同的相等性,它返回了 true:
Parent parent0 = session.Load<Parent>(0);
Child child = session.Load<Child>(0);
bool externalTest = parent0 == child.Parent;
然后我为我的父母编写了一个方法来测试完全相同的东西:
bool internalTest = parent0.IsRelated(child);
... Parent Class code
public virtual bool IsRelated(Child child)
{
return child.Parent == this;
}
...
它返回假......我只是不明白。这是完全相同的代码。
更多信息:
所以为了获得更多信息,我修改了我的测试:
Parent parent0 = session.Load<Parent>(0);
Child child = session.Load<Child>(0);
bool externalTest = parent0 == child.Parent;
System.Diagnostics.Debug.WriteLine("outside parent: " + externalTest);
System.Diagnostics.Debug.WriteLine("Number of parent instances before call to IsRelated:" + Parent.NumberOfInstances);
parent0.IsRelated(child, parent0);
System.Diagnostics.Debug.WriteLine("Number of parent instances after call to IsRelated:" + Parent.NumberOfInstances);
... Parent Class code
public virtual void IsRelated(Child child, Parent sameAsThis)
{
bool internalTest = child.Parent == this;
System.Diagnostics.Debug.WriteLine("inside parent:" + internalTest);
bool sameTest = sameAsThis == this;
System.Diagnostics.Debug.WriteLine("this should equal sameAsThis:" + sameTest);
}
...
我将父实例直接传递给自身并验证它是同一个实例。好吧,不是,当我输入 IsRelatedMethod 时,我创建了另一个实例。
这是我的测试结果:
外部父母:真
调用 IsRelated:1 之前的父实例数
内部父母:假
这应该等于 sameAsThis:False
调用 IsRelated 后的父实例数:2
我究竟做错了什么 ?
有关详细的映射文件和 pocos,请参阅(http://stackoverflow.com/questions/13253459/relationships-fixup-in-entityframework-vs-nhibernate)