Работа с «удаленными» строками SubSonic - PullRequest
0 голосов
/ 24 августа 2009

При загрузке данных с помощью SubSonic (с использованием ActiveRecord или коллекции) будут загружаться только записи с IsDeleted, для которого установлено значение false. Как я могу показать те строки, которые были удалены?

Например, удаление сотрудника с помощью:

Employee.Delete(1)

Теперь сотрудник 1 помечен как удаленный. Теперь я хочу отменить удаление и / или показать список удаленных сотрудников, как я могу это сделать? Либо будет отменено, если пользователь случайно удалил сотрудника, либо он хочет перейти в список «корзины» с ранее удаленными сотрудниками (т. Е. Только с теми, у которых для IsDeleted установлено значение true).

Edit: Использование SubSonic 2.2

Ответы [ 4 ]

1 голос
/ 08 ноября 2009

Я столкнулся с этой проблемой вчера с дозвуковой 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();
        <# } #>
    }
1 голос
/ 24 августа 2009

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);
}
0 голосов
/ 26 августа 2009

эти строки легко показать, просто создав запрос вручную вместо использования загрузчиков коллекций

т.

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) И также загрузит false

Надеюсь, это поможет

0 голосов
/ 25 августа 2009

Я сталкиваюсь с той же проблемой.

Я работаю в проекте, который использует схему ActiveRecord. Я могу получить логически удаленные записи, просто запросив их.

Проблема в том, что сгенерированные ActiveRecord классы не имеют никаких свойств или методов для изменения удаленного статуса записи.

Это должно быть так же просто, как установка "IsDeleted = false", но эта функциональность, кажется, не существует.

- Не бери в голову это. Я восстановил свой класс ActiveRecord, и теперь мой столбец «Удаленные» доступен по коду вызова. Должно быть, застрял где-то.

...