Asp.net MVC 2 Entity Framework Общий метод репозитория.Как обновить определенный столбец? - PullRequest
0 голосов
/ 23 августа 2010

У меня 10 таблиц с одинаковым дизайном.Каждый из них имеет столбец IsActive.

Например:

Категория

 CatID 
 CatName 
 IsActive

Продукт

PrdID
PrdName
IsActive

Есть ли способ создать универсальный метод для обновления столбца IsActive.

 public void Deactivate<T>(T TEntity)
 {
     // Put the code to update 
     // IsActive
 }

Я читал об общем хранилище, но ничего не объясняет, как обновить конкретный столбец.

Спасибо всем.

1 Ответ

4 голосов
/ 23 августа 2010

Хитрость заключается в том, чтобы установить ограничение типа where для вашего универсального типа на класс BaseRepository. Попробуйте что-то похожее на это:

ВНИМАНИЕ: код воздуха; -)

Базовая модель:

public interface IDbTable
{
    bool IsActive { get; set; }
}

public class DbTable
{
    public bool IsActive { get; set; }
}

Ваша модель

public class Category : DbTable
{
    public int CatId { get; set; }
    public string CatName { get; set; }
}

public class Product : DbTable
{
    public int PrdId { get; set; }
    public string PrdName { get; set; }
}

Ваш репозиторий

public interface IBaseRepository<T> where T : class, IDbTable
{
    void Deactivate<T>(T entity);
}

public class BaseRepository<T> : IBaseRepository
{
    public void Deactivate<T>(T entity)
    {
        entity.IsActive = false;
    }
}

Вы можете пойти еще дальше и расширить свою таблицу IDb, добавив в нее еще более общие и полезные столбцы. Э.Г.

public interface IDbTable
{
    int Id { get; set; }
    bool IsActive { get; set; }
    DateTime UpdatedOn { get; set; }
    DateTime CreatedOn { get; set; }
}

Repo

public interface IBaseRepository<T> where T : class, IDbTable
{
    T GetById(int id);
    void Add(T entity);
    void Update(T entity);
    void Deactivate(T entity);
}

public class BaseRepository<T> : IBaseReposiotry<T>
{
    public T GetById(int id)
    {
        //code to get the entity by id
    }

    public void Add(T entity)
    {
        entity.CreatedOn = DateTime.UtcNow;
        entity.UpdatedOn = DateTime.UtcNow;
    }

    public void Update(T entity)
    {
        entity.UpdatedOn = DateTime.UtcNow;
    }

    public void Deactivate(T entity)
    {
        entity.IsActive = false;
    }
}

Эти две статьи также должны вам помочь:
новый репозиторий (). DoMagic ()
Реализация простого универсального репозитория с LinqToSql

HTHS
Charles

...