c# – 如何从通用存储库或数据库表中检索对象,其中包含表名的字
发布时间:2020-12-15 17:19:41 所属栏目:百科 来源:网络整理
导读:坐在存储库模式之上,我为每个对象(即数据库表)提供了类,以允许基于类型的数据访问: public abstract class ObjectDataAccessBaseT : IObjectDataAccessT{ public virtual IQueryableT FindAll() { ... } public virtual T Get(int? id) { ... } public virt
坐在存储库模式之上,我为每个对象(即数据库表)提供了类,以允许基于类型的数据访问:
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>并显式实例化所有存储库. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |