【发布时间】:2010-09-17 11:46:14
【问题描述】:
到目前为止,我一直在我的所有 c# 数据库驱动应用程序中使用活动记录。但是现在我的应用程序需要将我的持久性代码从我的业务对象中分离出来。我已经阅读了很多关于 Martin Fowler 的数据映射模式的帖子,但我对这种模式的了解仍然非常有限。
让我们使用以下示例:
如果我有 2 个表 - Customer 和 CustomerParameters。 CustomerParameters 表包含用于创建新客户的默认客户值。
然后我必须创建一个CustomersMapper 类来处理所有的Customer 持久性。然后,我的 Customer 和 CustomersList 类将与此映射器类协作以持久保存客户数据。
我有以下问题:
如何在不违反某些业务规则的情况下将原始数据传输到我的客户类和从我的客户类传输到映射器? DTO 的?
是否可以在我的 Mapper 类中使用 SaveAll 和 LoadAll 方法来更新和加载多个客户的数据?如果是这样,在 SaveAll 的情况下,映射器如何知道何时更新或插入数据?
Customer 映射器类是否也负责从 CustomerParameters 表中检索默认值,还是创建 CustomerParameters 映射器会更好?
O/R 映射器工具并不真正在这里。我使用的数据库是事务性的,需要我编写自己的映射器模式。
任何想法和cmets将不胜感激。
【问题讨论】:
-
您能否扩展您对“事务性”的含义,尤其是与传统的事务性 RDBMS(如 MS-SQL 或 MySQL)进行对比?否则我会毫不含糊地支持 Petter 的回答。
-
我正在使用不基于 SQL 的 Btrieve(基于索引顺序访问方法 (ISAM))。我熟悉的所有 O/R Mapping 工具都不支持 Btrieve。
标签: datamapper