如何动态地将3个不同的类实例化为相同的变量名,linq2sql c#

时间:2011-05-02 20:34:42

标签: c# linq linq-to-sql

假设我的数据库中有3个表:人员,任务和项目

假设我有3个类的存储库:PeopleRepository,TaskRepository和ProjectRepository。

现在我想要一个单独的方法,它可以用于任何这些类。

显然我可以为每个表写出大量代码,但我宁愿将代码保持在最低限度。我已经对可能传递给方法的不同列名称的反射工作正常,但我似乎无法使这样的代码工作。

switch (tableName)
            {

                case "people":
                    var repository = new PeopleRepository();
                    break;
                case "tasks":
                    var repository = new TaskRepository();
                    break;
                case "projects":
                    var repository = new ProjectRepository();
                    break;
             }

//Modify respective database table
repository.getItem(id); //etc
repository.Save(); //etc

我尝试了其他一些类似的东西,但似乎都没有。改变定义变量的范围等。

我觉得c#应该有一些很好的处理这个,是这样的吗?或者我是否必须在每个switch语句中编写相同的代码?

2 个答案:

答案 0 :(得分:2)

您可以创建这些类将实现的接口。然后使用

IRepository repository;

// your switch here
//switch() { case x: repository = new TypeRepository(); }

repository.GetItem(id);
repository.Save();

您还可以创建存储库dynamic

dynamic repository;

该类型将在运行时解析。

答案 1 :(得分:1)

使用.getItem(id)和.Save()的虚方法创建父类(RepositoryBase),从中继承,并在PeopleRepository,TaskRepository和ProjectRespository的每个实现中覆盖这些方法。

另一种选择是创建一个三者都可以使用的接口(IRepository)。