我使用GIS软件将GIS对象的信息存储到不同类型/类别的GIS对象(道路、河流、建筑、海洋、.)的单独数据库表中。并保存元数据表,其中存储有关类名及其DB表的信息。
这些不同类的地理信息系统对象共享一些参数,即描述和标识,我想用一个通用的C#类(我们称之为GisObject)来表示所有这些不同的地理信息系统类,这足以满足我在应用程序中列出给定地理信息系统类的地理信息对象的非地理信息系统部分所需要做的工作。
对于我来说,问题是如何映射那些对象,在创建要接收的NHibernate GisObject时使用C# GisObject向NHibernate解释,使用表名作为参数,该参数将从元表中读取(它可以分为两个步骤,我可以在第一步手动获取表名,然后在提取GisObject数据时将其传递给NHibernate )。
有没有人处理过这种情况,可以做到吗?
发布于 2008-09-09 13:50:33
@Brian Chiasson
不幸的是,不能选择创建所有的GIS数据类,因为类是在应用程序中动态创建的。每个相同类型的GIS数据都应该是一个类,但是我的用户有可能获得新的数据集并将其放入数据库中。我不知道我的用户在应用程序中会有哪些类。因此,前端每类映射模型无法工作,因为明天将有另一个新的数据库表,并且需要创建具有新映射的新类。
@所有这些都可能在我的GisObject类的XML配置文件中写入我自己的自定义查询,然后在数据访问类中使用
string qs = getSession().getNamedQuery(queryName);并使用字符串替换注入数据库名(通过替换某些占位符字符串),我将将其作为参数传递。
qs = qs.replace(":tablename:", tableName);你对那个解决方案有什么看法?我知道在不受控制的环境中可能存在安全风险,在这种环境中,表名将作为用户输入获取,但在这种情况下,我有一个包含GIS数据类的正确和有效表名的元表,在调用获取特定类GIS对象数据的查询之前,我将读取这些表名。
发布于 2008-09-09 13:08:51
这里做的最简单的事情可能是使用所有公共的NHibernate成员创建一个抽象的基类,然后继承其他的X类,这些类只有必要的映射。然后,我将使用Factory模式使用元数据创建特定类型的对象。
发布于 2008-09-09 11:51:39
您可以这样做的一种方法是声明一个接口,比如IGisObject,它在接口上声明了公共属性。然后实现一个具体的类,该类映射到每个表。这样,它们仍然都是IGisObject类型的。
https://stackoverflow.com/questions/51654
复制相似问题