使用SubSonic(使用ActiveRecord或集合)加载数据时,只会加载IsDeleted设置为false的记录。如何显示已删除的行?
例如,删除员工:
Employee.Delete(1)
现在员工1被标记为已删除。现在我想要撤消删除和/或显示已删除员工列表的选项,我该怎么做?如果用户意外删除了该员工,或者他们想要与之前已删除的员工(即只有IsDeleted
设置为true的那些员工进入“垃圾”列表),则该文件将被取消。
修改 使用SubSonic 2.2
答案 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)并且它也会加载这些错误
希望这有帮助