c# - .Net 2.0 的简单存储库

标签 c# repository design-patterns

我正在尝试将存储库模式用于在 .Net 2.0 中创建的站点。所有客户端代码都需要绑定(bind)数据表,我无法更改它,所以请多多包涵。

我有一个(可能是愚蠢的)问题。我不知道如何将强类型实体传递到我的具体存储库。该接口(interface)迫使我传递一个 Employee 类型,但我需要传递一个 Developer 类型(它派生自 Employee),因为它具有在基类中找不到的特定属性。

    public interface IEmployeesRepository
    {
        DataTable Employees { get; }
        void SaveEmployee(Employee employee);
        void DeleteEmployee(Employee employee);
    }

    public class DevelopersRepository : IEmployeesRepository
    {             
        public void SaveEmployee(Developer employee)
        {
            Database db = new SqlDatabase(connectionString);
            DbCommand dbCommand = db.GetStoredProcCommand("Developers_Insert",   employee.ProgrammingLanguage);
        db.ExecuteNonQuery(dbCommand);
            }
        }
    }

我试过使用泛型,但我仍然没有强类型对象,对吗?

最佳答案

我可能是错的,但听起来您想使用通用约束:

public interface IEmployeeRepository<T>
    where T : Employee
{
    DataTable Employees { get; }
    void SaveEmployee(T employee);
    void DeleteEmployee(T employee);
}

public class DevelopersRepository : IEmployeeRepository<Developer>
{             
    public void SaveEmployee(Developer employee)
    {
        Database db = new SqlDatabase(connectionString);
        DbCommand dbCommand = db.GetStoredProcCommand("Developers_Insert",   employee.ProgrammingLanguage);
        db.ExecuteNonQuery(dbCommand);
    }
}

关于c# - .Net 2.0 的简单存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424996/

相关文章:

c# - MVC 3 中的某些页面不显示菜单?

c# - 使用 VB 的 FileSystem.DeleteFile 方法无法正常工作,将文件删除到 csharp 中的回收站

c# - 服务器标记不能包含 <% ... %> 结构

c# - 如何在 EF 中使用存储库模式使用存储过程和复杂类型?

c# - 我们可以从 Bash 脚本调用或执行 C# 源代码吗?

java - 重构访问遗留系统中存储库的域逻辑

svn - 将 sharepath 文件系统作为 svn 服务器

design-patterns - 如果它是技术特定的,它仍然是一种设计模式吗?

c++ - 基于聚合的架构问题

java - 软件实践 - 可以使用输出参数使方法多态吗