我最近在http://forums.lhotka.net/发布了此消息,但我没有收到回复。希望我在这里有更好的运气。这是我的问题。
我正在使用CSLA .NET 4.5,最近我向BusinessBase添加了一个额外的Child_Update方法,以便在批量保存时支持其Parent BusinessListBase。但是,这似乎在我们的系统中引入了一个错误。看起来如果你有两个Child_Update方法,其中一个是无参数的,那么将不会调用无参数方法。即使您指定的DataPortal.UpdateChild没有超出子对象的其他参数。
伪代码中的示例:
public class SomeChild : BusinessBase<SomeChild>
{
//No longer called
private void Child_Update() {}
//Newly added
private void Child_Update(SomeNewParent parent) {}
}
public class SomeLegacyParent : BusinessBase<SomeLegacyParent>
{
private static readonly PropertyInfo<SomeChild> SomeChildProperty =
RegisterProperty<SomeChild>(x => x.SomeChild, RelationshipTypes.Child);
public SomeChild SomeChild
{
get { return GetProperty(SomeChildProperty); }
set { SetProperty(SomeChildProperty, value); }
}
//Use to call Child_Update(), but now
//calls Child_Update(SomeNewParent parent)
DataPortal.UpdateChild(ReadProperty(SomeChildProperty));
}
public class SomeNewParent : BusinessBase<SomeNewParent>
{
private static readonly PropertyInfo<SomeChild> SomeChildProperty =
RegisterProperty<SomeChild>(x => x.SomeChild, RelationshipTypes.Child);
public SomeChild SomeChild
{
get { return GetProperty(SomeChildProperty); }
set { SetProperty(SomeChildProperty, value); }
}
//Calls Child_Update(SomeNewParent parent) --- as expected
DataPortal.UpdateChild(ReadProperty(SomeChildProperty), this);
}
现在我知道CSLA使用Reflection来查找要调用的正确数据访问方法,但是我不确定为什么无参数方法与基于传递给DataPortal.UpdateChild的参数的参数化方法无法区分?这可能是一个CSLA错误还是我错过了什么?
答案 0 :(得分:2)
编辑:根据链接到此答案评论的帖子,此问题已在Csla中修复。