CSLA .NET - Child_Fetch无法按预期工作

时间:2013-08-15 22:22:23

标签: c# csla

我最近在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错误还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

嗯,我怀疑这可能是Csla中的一个错误。尝试将Child_Update()更改为Child_Update(SomeLegacyParent),这样您就不再拥有无参数的Child_Update。您可能必须将旧的父级调用更改为UpdateChild以传递“this”。

编辑:根据链接到此答案评论的帖子,此问题已在Csla中修复。