This is a migrated thread and some comments may be shown as answers.

Logical Delete

3 Answers 63 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
john
Top achievements
Rank 1
john asked on 13 Dec 2012, 02:16 AM
My all table have one column named "IS_DELETED" to indicate whether the record is deleted. My query is whether there is a easy way to filter those deleted row without writing code to handle it for every table?

3 Answers, 1 is accepted

Sort by
0
Dimitar Tachev
Telerik team
answered on 17 Dec 2012, 05:02 PM
Hi John,

In order to filter the deleted records you could add a Where clause before getting them from the database. The GetAll<T> method of the OpenAccessContext is returning IQueryable<T> which allows you easily to filter the requested data. 

Here is a sample code snipped demonstrating that approach:
using (EntitiesModel db = new EntitiesModel())
{
    // takes only the entities that are not marked as deleted
    IQueryable<SomeEntity> carsWithoutABS =
                             db.GetAll<SomeEntity>().Where(e => !e.IsDeleted);
    // where IsDeleted is mapped to your IS_DELETED column
}

Also you could take a look at our ADO API with which you could directly execute sql statement and materialize the query result to a given type.

I hope this is applicable for you.

Kind regards,
Dimitar Tachev
the Telerik team
Telerik OpenAccess ORM Meets ASP.NET Web API. Read more.
0
john
Top achievements
Rank 1
answered on 18 Dec 2012, 01:09 AM
Hi,

Yes, your solution can meet my requirement but it's not very convenient if all methods all need to write code to filter IS_DELETED column. Whether there a base method which is called for all search method in that case I only write the filter code in base class?
0
Dimitar Tachev
Telerik team
answered on 20 Dec 2012, 09:54 AM
Hi John,

In order to write the filter only one time I suggest you to add custom EndPoints for the entities that have IS_DELETED column in the database by extending your Domain Model with a partial class.

For your convenience I prepared the following two-step tutorial demonstrating that approach.

1. Create a partial class.



2. Implement new EndPoints.
using System.Linq;
    
namespace YoudDomainModelNamespace // e.g. OpenAccessModel
{
    public partial class YourDomainModelName // e.g. EntitiesModel
    {
        // e.g. endpoint for Employee with name NotDeletedEmployees
        public IQueryable<EntityName> NotDeletedEntityName     
        {
            get
            {
                return this.GetAll<EntityName>().Where(e => !e.IsDeleted);
            }
        }
        ... // the same endpoints for all of the entities you need
    }
}
Please bear in mind that the partial class should be in the same assembly and in the same namespace as your Domain Model.

After that you will be able to choose whether to get all of the records from the database or only the filtered one without manually writing the filter each time – look at the example below:
using (EntitiesModel context = new EntitiesModel())
{
    // get all employees from the database
    IEnumerable<Employee> allEmployees = context.Employees;
 
    // get only the employees that are not marked as deleted
    IEnumerable<Employee> filteredEmployees = context.FilteredEmployees;
}

I hope this is applicable for you.  

All the best,
Dimitar Tachev
the Telerik team
Telerik OpenAccess ORM Meets ASP.NET Web API. Read more.
Tags
General Discussions
Asked by
john
Top achievements
Rank 1
Answers by
Dimitar Tachev
Telerik team
john
Top achievements
Rank 1
Share this question
or