调用所有数据库/ ORM /数据访问层专家

时间:2009-09-08 09:17:48

标签: database tsql database-design orm data-access-layer

我有一点DB挑战你。希望你能提供帮助。

问题:

我需要一个能让我“处理”主键/复合键更改的解决方案。通过 “handle”,我的意思是我仍然可以在很少或没有代码更改的情况下执行CRUD操作。从应用程序/数据库的角度来看,它需要有最小的麻烦。

我被允许在太阳下使用几乎所有东西,除了2个约束如下: 1)需要使用SQL Server 2)不允许使用动态SQL查询

我最初的头脑风暴/可能的解决方案?

a)能否以某种方式在存储过程级别解决?

b)可以通过适配器模式/反射/数据库模式询问来巧妙地使用DTO来解决这个问题吗?

c)某种花哨的LINQ /反射技巧?

d)NHibernate能以某种方式解决这个问题吗?

我受到一点时间的压力(我必须在本周末之前提出解决方案)所以任何帮助都将受到赞赏。所以,在这里。如果你认为你可能有一个解决方案,但不能使用任何脑细胞,这是一个激励(希望它会起作用)......如果你的解决方案解决了我的问题,我最终使用它,你获得完全许可您选择的任何Microsoft软件的商业(非盗版:P)版本,例如。 Windows 7,SQL Server,Office 2007等。如果激励不起作用,我希望你能帮助我吗? :-)绝望的种类: - )

非常感谢你。

2 个答案:

答案 0 :(得分:2)

假设您有一个生成主键的记录 - 这只是记录的不可变标识符。最终用户永远不需要看到它,但它允许您可靠地识别记录,从而指定对其的更改。

其他列或列组合是用户认为是PrimaryKey但实际上不是“主要”的,它们只是(可能是唯一的)可数据化的数据。

所以GivenName / FamilyName - 可能是索引的好字段,但显然可以改变。

社会安全号码(或一些所谓的唯一号码) - 听起来像一个很棒的主键。嗯但是假设某个错误的人进入系统,你如何解决它。如果它只是一个具有唯一索引的列,问题出在哪里?

真正的主键是我们用来连接其他表的东西。

用户 - 用户订单

由系统生成的主键链接,而不是他可变的类似SSN的东西。

答案 1 :(得分:0)

查看CSLA(http://www.lhotka.net/)业务对象。

还可以看一下CodeSmith的代码生成,它有CSLA模板和其他ORM模板。