插入笔记自动插入产品 - 这种情况的最佳做法?

时间:2011-08-14 22:58:24

标签: c# .net entity-framework design-patterns entity-framework-4

我要问的是,知道这种情况的最佳做法是什么。我正在使用EF4。

我有两个名为“Note”和“Product”的实体。我有另一个名为“Stock”的实体 注意有很多产品,每个产品只能在一个注释中(产品必须有注释) 每当我插入,删除或更新产品时,我都必须根据产品附带的注释更新相关的Stock实体。

在InsertProduct()方法中,我插入产品,然后更新相关的库存。如果产品将破坏Stock规则 - 我得到一个例外,操作将中止,应该是。

在InsertNote()方法中,我无法插入Note,因为这样的东西会自动插入附加的产品,并且我需要更新Stock和验证Stock规则的每个产品(如上所述)。因此,在插入Note之前,我遍历所有Products并调用InsertProduct()。之后我插入了笔记。

直到这里有两个问题:

  1. 事情应该是那样的吗?我需要手动插入吗? 在插入注释之前每个产品?这是如何解决的 事实产品必须附加到存在注意(在时间 插入产品,未插入注释)?

  2. 我应该在哪里放置InsertNote()和InsertProduct()方法? 他们每个人都处理笔记,产品和股票实体。我应该创建类似NoteService和ProductService类的东西,还是应该将它们放在一个大型服务类中?

  3. 在我问here的问题中,我得到了一个答案,描述了如何创建像OnBeforeInsert()这样的事件。这种实现是否适合我需要在插入产品后更新库存?

1 个答案:

答案 0 :(得分:0)

我不太确定我是否完全掌握了您要做的事情以及验证股票规则和更新股票的意义。但是,如果您不应该重复使用 InsertNote 中的 InsertProduct ,那么您似乎就是这样。

似乎 InsertNote

  • 检查所有规则并相应地更新 Stock (我假设这意味着将库存从数据库加载到上下文中,或者如果你将它们放在内存中的话,可以附加它们)
  • 将新的注意添加到上下文中(这将添加您之前放入其集合中的新产品)
  • SaveChanges()

InsertProduct 应该

  • 检查/更新上述股票
  • 产品添加到注意产品
  • 的集合中
  • SaveChanges()

换句话说,这两种方法都只会重用规则检查部分。 InsertProduct 可能最好重命名为 UpdateProductsOfNote ,因为它听起来像注意是模型的aggregate根(在{{3}中)你对聚合做了持久性/存储库操作。

至于这些方法的位置,如果它们不是太复杂,将它们添加到存储库/数据访问类(拥有EF上下文对象)就可以了。看起来他们有很多与之相关的规则。如果是这样,某种域名服务可能是更好的选择。似乎许多规则不仅仅是支持持久性。如果您重新定位这些方法,那么您可能不需要像在引用的帖子中那样处理ObjectContext个事件。