2011-04-02 34 views
1

我有一些存储库方法可以更新整个实体或其部分(例如,当用户批准邀请时,我需要更新的只是“Approved”字段)。 在这种回购方法中传递参数的最佳做法是什么?我是否应该传递整个实体“邀请”并仅使用一个字段进行更新,还是只应传递实体ID和“已批准”值?谢谢。MVC:在仓库方法中传递什么 - 实体或值?

回答

4

我建议如果你已经拥有它,那么就传递实体本身。如果您已经查询过它,为什么要再次查询存储库?

我绕过一个id是在情况下,我还没有对象,但是这是相当罕见的,因为一旦我得到的控制器我倾向于查询对象在那里的ID只有一次。

+0

@Parrots,感谢您的快速回复。当用户在Web浏览器中批准邀请时,我可以在服务层中创建我的域对象,并通过ID从回购站获取它。然后,我可以将其设置为批准状态,并将其作为域对象传回回购,并将其重新转换为linq2sql实体并在数据库中更新。但是你不认为系统只是简单而轻便地传递ID和值,而不需要从linq2sql到对象模型的任何对话并返回?在这种情况下,回购方法将检索一个实体,将一个字段设置为一个值并提交更改。 – Jim 2011-04-02 03:23:27

+0

@Parrots,问题2,请。为了实现邀请approvement我也可以用这样的方式:调用一个服务层法“批准”的检索对象,将其设置批准并更新与更新回购方法在整个实体。这是比单独的批准回购方法更好的做法吗? – Jim 2011-04-02 03:32:51

+0

回复#1:我趁EF的变化的跟踪,以便所有我我的域名层内的工作是对象本身,我操纵它们适当的,就是这样。我的回购库中没有更新方法,因为EF会为您免费提供持久性跟踪。为什么我的域名关心它必须坚持改变?让EF为你做,只是担心在那里保持域逻辑(Domain.Approve(实体实体){entity.Approved = true;})。 http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx – Parrots 2011-04-02 03:48:41