微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何从通用存储库或数据库表中检索对象,其中包含表名的字符串和记录索引的int

坐在存储库模式之上,我为每个对象(即数据库表)提供了类,以允许基于类型的数据访问:

public abstract class ObjectDataAccessBase<T> : IObjectDataAccess<T>
{
    public virtual IQueryable<T> FindAll()
    {
        ...
    }
    public virtual T Get(int? id)
    {
        ...
    }
    public virtual void Add(T obj)
    {
        ...
    }
    public virtual void Delete(T obj)
    {
        ...
    }
}

该片段涵盖了界面,这是我见过的常见模式.所以从应用程序的另一个地方,我所拥有的是对象名称的字符串(即db表或“T”),以及表示我想要的对象索引的int,我想要传递给“Get(int?id)”以返回有问题的对象.但是我需要先实例化正确的类,然后进行渲染,以便公开我需要的方法.我也需要施放物体.

问题是:在这种情况下可以实现吗?如果是这样,怎么样?

(关于调用的上下文的更多细节:我有一个表将一种对象与可能的许多其他对象相关联,所以我在这个表中有一个列为’表名’为DB表的列,一个’int id’为表中对象的索引,我希望能够从表中检索对象,使用这两个信息正确地进行转换.只是用这种模式测试水域,我已经想知道它是否值得…)

谢谢你的帮助.

蒂姆.

解决方法

使用Reflection创建存储库的实例:

var type = Type.GetType("ObjectDataAccessBase");
type = type.MakeGenericType(Type.GetType("Your T as string"));
var repository = Activator.CreateInstance(type);

var method = type.getmethod("Get");
var result = method.Invoke(repository,new object[]{ id });

我写的没有VS,所以可能有一两个错误.但希望上面的内容能让你开始.

如果您将大量使用字符串,我建议您创建一个静态字典< string,IObjectDataAccess>并显式实例化所有存储库.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐