Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用字符串作为表名,int作为记录索引,从通用存储库或DB表中检索对象_C# - Fatal编程技术网

C# 如何使用字符串作为表名,int作为记录索引,从通用存储库或DB表中检索对象

C# 如何使用字符串作为表名,int作为记录索引,从通用存储库或DB表中检索对象,c#,C#,在存储库模式的顶部,我为我的每个对象(即db表)提供了类,以允许基于类型的数据访问: public abstract class ObjectDataAccessBase<T> : IObjectDataAccess<T> { public virtual IQueryable<T> FindAll() { ... } public virtual T Get(int? id) { ...

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

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)
    {
        ...
    }
}
公共抽象类ObjectDataAccessBase:IOObjectDataAccess
{
公共虚拟IQueryable FindAll()
{
...
}
公共虚拟T Get(int?id)
{
...
}
公共虚拟无效添加(T obj)
{
...
}
公共虚拟无效删除(T obj)
{
...
}
}
这段代码涵盖了接口,这是我见过的常见模式。因此,在应用程序的另一个地方,我得到的是一个对象名称字符串(即db table,或“T”),以及一个表示表中所需对象索引的int,我希望将其传递给“Get(int?id)”以返回有问题的对象。但我需要先实例化正确的类,并进行转换,以便公开我需要的方法。我也需要投射这个物体

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

(关于调用上下文的更多详细信息:我有一个表,它将一种对象与可能的许多其他对象关联起来,因此我在这个表中有一个列,其中DB table有一个'string name',表中对象的索引有一个'int id',我希望能够使用这两位inf从表中正确地检索对象形成。只是用这种模式测试水,我已经在想这是否值得…)

谢谢你的帮助


Tim。

使用反射创建存储库的实例:

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,所以可能会有一两个错误。但希望上面的内容能让你开始


如果您经常使用字符串,我建议您创建一个静态
字典
,并显式实例化所有存储库。

谢谢mate-这非常有用。但是我看不到使用类型字符串强制转换返回对象以访问其属性的方法?嗯,您有点不能。您的方法无法返回
t
因为您在设计时不知道返回对象(运行时只有一个字符串)。如果您知道实际类型,您可以始终使用
将返回对象转换为
调用此方法的位置(但如果您知道可以直接使用存储库的类型,我假设您只有一个字符串)我原以为是这样的。谢谢你帮我确认这一点——这就是答案。我将集中精力解决我的问题。再次感谢你的帮助,Jakub:)