我们已经使用CSLA 4.5.600多年了,由于某些原因,迁移到每一个更新的版本被推迟。
现在,我们希望迁移到最新版本(5.3.1)
大多数情况下,我们都有编译错误(接口作为输入参数而不是对象等等),但是我们已经做好了准备。最后,我们修复了所有编译时错误。进行了测试,他们中的大多数人都没事。
但是我们还没有准备好面对“子”对象的问题。
似乎,在CSLA内核内部有一些很深的变化,产生了很难找到的bug。
似乎,它适用于房地产公司IsNew IsDirty IsSavable等。
示例:
我们有一些类,让我们把它命名为父级
我们有一些子类,它是这个父对象上的一个属性。
我们有桌子Table1和Table2
我们创建了一个对象Parent1,它必须存储在Table1中,他的属性将存储在表1e 225中的Table2 (parentid)必须针对父母1‘id中。
我们创建了一个对象Parent2,它必须存储在Table1中,而他的Child属性(parentid)必须以Table1中的父母2‘id为目标。
在CSLA 4.5.600中,我们做了这样的事情:
Csla.Data.DataMapper.Map(parent1, parent2, true);
Csla.Data.DataMapper.Map(parent1.Child, parent2.Child, true);Child property on parent2有:
IsNew = true
IsDirty = true
IsSavable = true但是,如果我们使用的是CSLA5.3.1,这段代码提供了如下内容:
IsNew = FALSE (!!!!)
IsDirty = true
IsSavable = true因此,它不是在Table2中为父级的两个孩子创建一个新记录,而是更新父对象的子属性的记录!
因此,CSLA 5.3.1的解决办法是:
string[] ignoreList = new string[] {"Child", "IsNew", "IsDirty" };
Csla.Data.DataMapper.Map(parent1, parent2, true, ignoreList );
Csla.Data.DataMapper.Map(parent1.Child, parent2.Child, true, ignoreList );但是,嗯,我们有几百节课。我们的项目在很大程度上基于CSLA。当然,没有更新所有最新的CSLA版本是非常大的错误,即使我们有理由继续使用旧版本,但是,现在是2020年10月,当引入时,我们需要理解它,是如何影响到的不仅是映射,还有其他东西?
问题不仅在于找到解决这个映射的方法,
这样做的目的是了解CSLA内部深处的变化如何影响到CSLA的所有功能,而CSLA功能也是“坏的”,但是我们不知道这是因为没有编译错误而破坏的,我们有大约60%的现有代码基/功能的测试覆盖率,但是40%的测试仍然没有测试,所以
几年前,我们买下了所有的CSLA书籍,但它们都是针对CSLA 4的,所以,他们无法帮助我们处理CSLA 5的违规行为。
阅读github“发布说明”并没有多大帮助。是否有博客文章、youtube视频或其他可以解释上述问题的东西?
发布于 2020-10-19 04:20:19
这可能是#cslanet中的一个bug --尽管CSLA本身的测试并没有改变,而且还在继续通过。
你能提供一个简单的复制问题,并将其作为一个问题在回购吗?
https://github.com/MarimerLLC/csla/issues
(听起来这个bug可能在DataMapper中,它确实得到了一些更新,因此有可能在那里引入了一个bug )
https://stackoverflow.com/questions/64401615
复制相似问题