1

我通过一个实际示例学习了 ASP.Net 和 Entity Framework 4。为了试验这一点,我使用了User发送设备的示例Repair。他们在线创建一个帐户,添加一组Details(地址、电话、传真等),然后RMA在线创建退货表格 ( )。

我正在努力解决的概念是分配DetailsReturns. AReturn有一组Details,一个用于联系、交付和计费。这些可以是Detail表的外键,如下所示。

问题是,如果在线User编辑他们的,Details它将更新Details. Return这不是期望的行为。Return应该使用Details创建时可用的。

问题是,如何让实体框架创建一个新Detail对象,而不是更新现有对象。也就是说,如果用户Detail使用新的邮政编码更新 23,Detail则不会更改 23,而是Detail创建一个新的(即 45)。Detail23 被从 中删除User,新的Detail45 被添加到User. 虽然现有的RMAusing Detail23 不受影响,但这意味着如果您查询,RMA您将获得在创建时提供的详细信息。

如果在阅读这个问题时,您认为这个概念是有缺陷的,而是应该以不同的方式设计数据库(即将Detail数据复制到表中的列RMA,或以复合键的形式添加到Detail表中以创建修订历史)。我也很高兴听到这些明智的话。

RMA系统的ERD

4

1 回答 1

1

如果您有基本 CRUD 范围之外的复杂数据编辑规则,那么实体框架基本上有两种选择。

  1. 放弃简单的数据绑定,将您的特殊处理构建到位于 GUI 和数据层 (EF) 之间的业务规则层中。

  2. 放弃精简 EF 层的简单性,将您的特殊数据处理规则放入存储过程中,然后将 EF 模型中的 CRUD 过程设置为您定义的存储过程。

无论哪种方式,您都在做出妥协,因为没有 ORM、EF 或其他方式可以同时适应“无代码”数据绑定和非平凡的 CRUD 处理。选择最适合您的项目和偏好的方法。有些人不能没有数据绑定,有些人不能忍受它。有些人喜欢存储过程,而另一些人则讨厌它们。

于 2012-06-10T23:30:09.290 回答