当我使用VB.NET使用亚音速时,它似乎有问题标记记录为旧和清洁。每当我使用ExecuteSingle或ExecuteTypedList查询时,我需要手动MarkClean和MarkOld,否则每当我保存它将保存为新记录。
我是唯一一个面临这个问题的人吗?我正在使用SubSonic 2.2顺便说一句。
答案 0 :(得分:1)
我检查了SubSonic的源代码..我发现VB类生成器没有实现IActiveRecord。我想很可能是因为VB.Net似乎不支持继承的“重新实现”或者你称之为......
因此,当我调试时,我发现Utility.IsSubSonicType返回false(因为ActiveRecord类返回IReadOnlyRecord,但IsSubSonicType检查IActiveRecord和IRecordBase),因此不调用SetLoadState和MarkClean。
所以我不确定这是一个错误还是故意的。有什么方法可以解决这个问题吗?
答案 1 :(得分:0)
当您使用ExecuteSingle或ExecuteTypedList时,您可能正在使用没有这些属性的类,我认为目的是您正在填充POCO而不是(必要)实体或其他ORM对象。
ExecuteAsCollection和所有.Load方法都按预期运行,因为它们调用SetLoadState()和/或MarkClean()。
就个人而言,我不会遇到这个问题,因为我将Subsonic纯粹用作(智能)DAL(仅限CRUD),而我自己的实体层负责处理脏/新的事情。
答案 2 :(得分:0)
是的,我遇到了同样的问题。 MarkClean和MarkOld在设置属性和保存之前修复了问题。 see this