使用SubSonic'已删除'行

时间:2009-08-24 16:30:59

标签: asp.net subsonic

使用SubSonic(使用ActiveRecord或集合)加载数据时,只会加载IsDeleted设置为false的记录。如何显示已删除的行?

例如,删除员工:

Employee.Delete(1)

现在员工1被标记为已删除。现在我想要撤消删除和/或显示已删除员工列表的选项,我该怎么做?如果用户意外删除了该员工,或者他们想要与之前已删除的员工(即只有IsDeleted设置为true的那些员工进入“垃圾”列表),则该文件将被取消。

修改 使用SubSonic 2.2

4 个答案:

答案 0 :(得分:1)

ActiveRecord没有内置的功能。您需要为此设置其他查询。您没有指定2.2或3.0。这是2.2语法。

public EmployeeCollection FetchAll(bool isDeleted)
{
    return new SubSonic.Select().From(Employee.Schema).Where(IsDeletedColumn).IsEqualTo(isDeleted).ExecuteAsCollection<EmployeeCollection>();
}

public EmployeeCollection GetTrashList()
{
    return FetchAll(true);
}

答案 1 :(得分:1)

昨天我用亚音速3遇到了这个问题,并决定改变T4模板以“修复”它。我为新函数LogicalAll添加了这些定义。作为替代方案,您可以将All的定义更改为此,但是您无法获取已删除的记录。

public static IQueryable<<#=tbl.ClassName#>> LogicalAll(string connectionString, string providerName) {
            <#if(tbl.HasLogicalDelete()){#>
            var results = GetRepo(connectionString,providerName).GetAll();
            if(results == null)
            {
                return new List<<#=tbl.ClassName#>>().AsQueryable();
            }
            return results.Where(x=> x.<#=tbl.DeleteColumn.CleanName#> == false);
            <#} else {#>
            return GetRepo(connectionString,providerName).GetAll();
            <# } #>
        }

    public static IQueryable<<#=tbl.ClassName#>> LogicalAll() {
        <#if(tbl.HasLogicalDelete()){#>
        var results = GetRepo().GetAll();
        if(results == null)
        {
            return new List<<#=tbl.ClassName#>>().AsQueryable();
        }
        return results.Where(x=> x.<#=tbl.DeleteColumn.CleanName#> == false);
        <#} else {#>
        return GetRepo().GetAll();
        <# } #>
    }

答案 2 :(得分:0)

我遇到了同样的问题。

我正在使用ActiveRecord方案的项目中工作。我可以通过专门查询它们来检索逻辑删除的记录。

问题是ActiveRecord生成的类没有任何属性或方法来修改记录的已删除状态。

它应该像设置“IsDeleted = false”一样简单,但这个功能似乎不存在。

- 没关系。我重新生成了我的ActiveRecord类,现在可以通过调用代码访问我的Deleted列。一定是卡在了某个地方。

答案 3 :(得分:0)

只需手动创建查询而不是使用集合加载器

,就可以轻松显示这些行

ProductsCollection col = new ProductsCollection().Load();

变为

ProductsCollection col = new Select()
                         .From(Tables.Products)
                         .ExecuteAsCollection<ProductsCollection>();

这应该为您加载一切。此外,您可以自己设置选项:

ProductsCollection col = new Select()
                         .From(Tables.Products)
                         .Where(Products.Columns.IsDeleted).IsEqualTo(false)
                         .And(Products.Columns.IsDeleted).IsEqualTo(null)
                         .ExecuteAsCollection<ProductsCollection>();

这将加载所有空值(如果您忘记将列上的默认值设置为false)并且它也会加载这些错误

希望这有帮助