Asp.net mvc MVC:在存储库方法中传递什么-实体还是值?

Asp.net mvc MVC:在存储库方法中传递什么-实体还是值?,asp.net-mvc,Asp.net Mvc,我有一些存储库方法可以更新整个实体或其部分(例如,当用户批准邀请时,我只需要更新“已批准”字段)。 在这种回购方法中传递参数的最佳实践是什么?我应该传递整个实体的“邀请”并只使用一个字段进行更新,还是应该只传递实体的ID和“批准”值?谢谢。如果您已经有实体,我建议您传递实体本身。如果已经查询过,为什么还要再次查询存储库 我唯一一次传递id是在我还没有对象的情况下,但这是非常罕见的,因为一旦我在控制器中获得id,我就倾向于在那里查询对象。如果您已经有实体,我建议传递实体本身。如果已经查询过,为什么

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

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


我唯一一次传递id是在我还没有对象的情况下,但这是非常罕见的,因为一旦我在控制器中获得id,我就倾向于在那里查询对象。

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


我唯一一次传递id是在我还没有对象的情况下,但这是非常罕见的,因为一旦我在控制器中获得id,我就会在那里查询对象。

@Parrots,谢谢您的快速回复。当用户在web浏览器中批准邀请时,我可以在服务层中创建我的域对象,该对象已通过repo的ID获得。然后我可以将其设置为approved并作为域对象传递回repo,在那里它将被重新转换为linq2sql实体并在数据库中更新。但是,您不认为系统只传递ID和值,而不需要从linq2sql到对象模型和对象模型之间进行任何对话,会更容易、更轻松吗?在这种情况下,repo方法将检索一个实体,将一个字段设置为一个值,然后提交更改。@Parrots,请回答问题#2。要实现邀请批准,我还可以使用以下方法:调用服务层方法“Approve”,该方法检索对象,将其设置为approved,并使用updaterepo方法更新整个实体。这比使用单独的Approve repo方法更好吗?Re#1:我利用了EF的更改跟踪功能,因此我在域层中处理的都是对象本身,并根据需要对其进行操作,就是这样。我的repo中没有更新方法,因为EF通过其持久性跟踪为您免费提供更新方法。为什么我的域名要关心它必须坚持改变?让EF为您做这件事,只需担心域逻辑(domain.Approve(Entity)Entity){Entity.Approved=true;})保持在那里。Re#2:如果你在EF中使用持久性跟踪,那么它知道哪些字段是脏的,并且只会更新那些需要它的字段。永远不要尝试使用EF-也许这真的是一件更好的事情。“好的,谢谢。”鹦鹉们,谢谢你们的快速回复。当用户在web浏览器中批准邀请时,我可以在服务层中创建我的域对象,该对象已通过repo的ID获得。然后我可以将其设置为approved并作为域对象传递回repo,在那里它将被重新转换为linq2sql实体并在数据库中更新。但是,您不认为系统只传递ID和值,而不需要从linq2sql到对象模型和对象模型之间进行任何对话,会更容易、更轻松吗?在这种情况下,repo方法将检索一个实体,将一个字段设置为一个值,然后提交更改。@Parrots,请回答问题#2。要实现邀请批准,我还可以使用以下方法:调用服务层方法“Approve”,该方法检索对象,将其设置为approved,并使用updaterepo方法更新整个实体。这比使用单独的Approve repo方法更好吗?Re#1:我利用了EF的更改跟踪功能,因此我在域层中处理的都是对象本身,并根据需要对其进行操作,就是这样。我的repo中没有更新方法,因为EF通过其持久性跟踪为您免费提供更新方法。为什么我的域名要关心它必须坚持改变?让EF为您做这件事,只需担心域逻辑(domain.Approve(Entity)Entity){Entity.Approved=true;})保持在那里。Re#2:如果你在EF中使用持久性跟踪,那么它知道哪些字段是脏的,并且只会更新那些需要它的字段。永远不要尝试使用EF-也许这真的是一件更好的事情。好的,谢谢。