Asp.net MVC 2 实体框架通用存储库方法。如何更新特定列?

发布于 2024-09-15 19:33:47 字数 458 浏览 4 评论 0原文

我有 10 张设计相同的桌子。它们每个都有一个 IsActive 列。

例如:

类别

 CatID 
 CatName 
 IsActive

产品

PrdID
PrdName
IsActive

有没有办法创建一个通用方法来更新 IsActive 列。

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

我读到了有关通用存储库的信息,但没有任何内容解释如何更新特定列。

谢谢大家。

I have 10 tables with the same design. Each of them have an IsActive column.

For example:

Category

 CatID 
 CatName 
 IsActive

Product

PrdID
PrdName
IsActive

Is there a way to create a generic method to update the IsActive column.

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

I read about generic repository, but nothing explains how to update a specific column.

Thanks everyone.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

聆听风音 2024-09-22 19:33:47

诀窍是在 BaseRepository 类上为泛型类型添加 where 类型限制。尝试类似的操作:

警告:空中代码;-)

基本模型:

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;
    }
}

您可以进一步扩展 IDbTable 以包含更多通用和有用的列。例如

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 实现简单通用存储库

HTH,
查尔斯

The trick is to put a where type restriction for your generic type on your BaseRepository class. Try something similar to this:

WARNING: air code ;-)

Base model:

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

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

Your model

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; }
}

Your repository

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;
    }
}

You could go even further and extend your IDbTable to include even more generic and helpful columns. E.g.

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;
    }
}

These two articles should help you out as well:
new Repository().DoMagic()
Implementing a Simple Generic Repository with LinqToSql

HTHs,
Charles

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文