我一直在努力了应该在与传统的应用程序一起选择工作的工具,我已经打了一个一对多的关系小砖墙。我花了最后一天左右为此寻找线索,但我没有运气。
我想如下映射表和多个其他表之间的关系:
父表表示“字典”。该字典是可用于(糟糕的)遗留应用程序中的临时记录查询中的所有数据库字段的列表。每条记录都包含可找到项目的表和列,唯一标识“友好”名称,全局值查找表中使用的键以及确定如何抽取这些查找值的标志,以及定义文本列SQL运行以获取查找数据,如果标志值设置得当。表名是[辞典](参见下面的表结构。)
该标志可以具有以下四个值之一:
- FREEFORM
- STANDARD
- SYSTEM
- DYNAMIC
如果该标志设置为FREEFORM,则最终用户可以输入他们想要的任何值。如果它是任何其他值,那么值必须从列表如下选择的是:
- 标准:将遗留应用程序从一个“UNION ALL”拉的所有值两个表的查询的唯一区别是,一张表是基于财政年度的,另一张是“全球”价值表。这些表格包含所有“标准”标记的字典记录的所有查找值。这两个表分别称为[fy_lookup_values]和[lookup_values](请参阅下面的表结构)
- SYSTEM:如果字典表中的友好名称是“状态”,则它将拉出所有[状态]表;如果是国家,则对[国家/地区]表格执行相同的操作(请参阅下面的表格结构)
- DYNAMIC:根据上述字典表中动态SQL字段的查询填充查找值。这些查询不会使用与上面其他两种查找类型的列名称类似的名称来对所选列进行别名。我将提供下面这些查询中使用的许多表格之一的示例。
表结构
Table [dictionary]
token int not null identity primary key
name varchar(10) not null
table_name varchar(50) not null
column_name varchar(30) not null
lookup_key varchar(10) not null
lookup_type varchar(8) not null
query_text text
Table [lookup_values]
lookup_key varchar(10) not null primary key
lookup_value varchar(20) not null primary key
lookup_description text not null
Table [fy_lookup_values]
lookup_key varchar(10) not null primary key
lookup_value varchar(20) not null primary key
lookup_description text not null
fy_year_token int not null
Table [state]
state_code varchar(4) not null primary key
state_name varchar(30) not null
Table [country]
country_code varchar(4) not null primary key
country_name varchar(50) not null
Table [banks]
bank_token int not null identity primary key
bank_name varchar(50) not null
所有应用程序中的抓斗两列,一代码和描述查找值retreivals的。遗留应用程序目前基于列位置而不是名称来处理所有传入数据。
我无法触及数据库结构(即使添加存储过程),也无法更改查找的方式,因为这些都是由一些传统应用程序使用的,任何更改都会使管理非常不快。我希望我能这样做,因为这只是让我的头发变灰的许多事情之一。所以...
我想我的主要问题是,如果有可能用NHibernate以这种方式映射这些数据,那么当我抓取一个字典项目时,它的查找值会填充在我的?如果可能的话,怎么样?我知道,如果所有查找都以相同的方式完成,我可以,但我甚至不知道是否可以根据外部获取的查询进行映射。
我希望这是有道理的,因为它花了我一段时间才围绕它围绕我的大脑。
编辑 下面是我想要完成的一些例子。
我们在[字典表以下记录:
token, name , table_name, column_name, lookup_key, lookup_type, query_text
1 , gender , customer , gender , gender , STANDARD , NULL
2 , addr_st , customer , addr_st , state , SYSTEM , NULL
3 , acct_type, cust_accts, type_code , acct_type , DYNAMIC , select type_code, descr from acct_types where active = 1
所以,在传统应用中,当他们得到拉升,这里是执行拉起查找值SQL。
性别:
select lookup_value,
lookup_description
from lookup_values
union all
select lookup_value,
lookup_description
from lookup_values
where fy_year_token = @P1
地址州:
select state_code,
state_name
from state
帐户类型:
select type_code,
descr
from acct_types
where active = 1
谢谢你的回复。我曾看过各种子类策略,但从我读的内容来看,它要求包含区分信息的表代表父类。就我而言,这是不可能发生的,我不认为这是可行的,因为歧视性信息完全基于另一类。也许我的帖子有点混乱。我将添加一些示例记录以帮助澄清。 – 2011-02-04 18:27:27