Subsonic 修复了亚音速3';测试存储库

Subsonic 修复了亚音速3';测试存储库,subsonic,subsonic3,subsonic-active-record,Subsonic,Subsonic3,Subsonic Active Record,我一直在尝试使用亚音速3.0的测试存储库支持进行单元测试,但遇到了一些问题,因此我认为我记录了这些问题,以及我提出的修复方案: 自动增量列不起作用 显然,在没有DB的情况下,自动增量列不会自动工作,但如果像我一样,您对所有标识列都使用简单的int或long,则此修复程序运行良好: (这是一份来自的副本,包括完整性) 在ActiveRecord.tt中: public override bool Equals(object obj){ if(obj.GetType()==t

我一直在尝试使用亚音速3.0的测试存储库支持进行单元测试,但遇到了一些问题,因此我认为我记录了这些问题,以及我提出的修复方案:

自动增量列不起作用 显然,在没有DB的情况下,自动增量列不会自动工作,但如果像我一样,您对所有标识列都使用简单的int或long,则此修复程序运行良好:

(这是一份来自的副本,包括完整性)

在ActiveRecord.tt中:

    public override bool Equals(object obj){
        if(obj.GetType()==typeof(<#=tbl.ClassName#>)){
            <#=tbl.ClassName#> compare=(<#=tbl.ClassName#>)obj;
            return compare.KeyValue().Equals(this.KeyValue());
        }else{
            return base.Equals(obj);
        }
    }
1:在函数public void Add(IDataProvider provider)的顶部{


感谢您的帮助-但最好的办法是告诉我们您的问题:)。StackOverflow更适合回答问题-我建议您前往Github并查看最新的来源(我们已经修复了其中的一些)。如果你看到有些事情可以解决,那么补丁是非常受欢迎的。

至于第2点,如果记录还没有保存,这仍然是错误的,因为它正在比较KeyValue()。为了确保未保存的记录也具有真正的平等性,我们还必须测试该记录是否为新记录,如果是,则确定另一种平等策略

谢谢Rob。在发布此消息之前,我实际上检查了最新的github版本,但看不到任何这些问题的修复方法。此外,自动增量功能,我认为您不会希望我这样做n标准模板(因为我不确定它是否在所有情况下都有效)。其他问题,我今天将提交一个修补程序。太正确了,说成是一个刚咬过的!Remove()对未保存的记录不起作用,因为它们没有可比较的id。如果id==0/IsNew(),可能应该返回到引用相等。
        public bool TestMode = false;
<#if(tbl.PK.SysType=="long" || tbl.PK.SysType=="int") {#>
        private static <#=tbl.PK.SysType#> next_test_autoid = 0;
<#}#>
    public override bool Equals(object obj){
        if(obj.GetType()==typeof(<#=tbl.ClassName#>)){
            <#=tbl.ClassName#> compare=(<#=tbl.ClassName#>)obj;
            return compare.KeyValue().Equals(this.KeyValue());
        }else{
            return base.Equals(obj);
        }
    }
    public int DeleteMany(Expression<Func<T, bool>> expression)
    {
        foreach (var x in _items.AsQueryable().Where(expression).ToList())
        {
            _items.Remove(x);
        }
        return 0;
    }