存储库,删除对象,模型与ID

时间:2014-10-24 08:13:34

标签: c# entity-framework wcf repository-pattern

在存储库中,最佳和最合乎逻辑的方法是什么?

使用实体删除或删除 ID

public void Delete(Entity item);

VS.

public void Delete(int Id);

我只是想知道什么是最佳做法,我应该通过Entity删除(通过在删除之前先找到对象来实现)或通过Id删除(在方法上搜索对象然后删除)。

3 个答案:

答案 0 :(得分:3)

AFAK选择第二个选项public void Delete(int Id);是最佳做法,如果您的IDprimary Key,将根据此ID检索或更新或删除实体,此外,如果您将您的存储库暴露给WebService( e.g like WCF)调用带有int的服务将是快速且不那么乏味,然后使用实体调用

更新

此外,您可以向您的Lead添加两个世界都断开连接,并且模型上定义的实体在客户端上不一样,因为您可以在您的prox上为您的分部类添加属性,它只是{ {1}}将在服务器端解释 SOAP envelope

Further Reading MSDN

more the envelope is less in size more the communication is fast

答案 1 :(得分:3)

传递域对象作为参数的问题是你不总是有一个实例,所以你被迫创建一个只有id的模拟/部分对象,只是为了满足方法,或者你检索删除之前的对象。两者都是低效和丑陋的。

Delete方法通常只需要主键标识符来删除记录。

在某些情况下,我同时提供Delete(T)和DeleteByPk(int id)

在签名中暴露主要密钥的缺点是签名不同,因此琐碎的内部代码生成器需要足够聪明才能处理它。任何值得使用的第三方发电机都足够智能。

答案 2 :(得分:2)

按ID删除是最好的选择。

存储库模式是数据库技术的抽象,因此您可以将存储库API与数据库技术分离得越多越好。

例如,如果您想切换到MongoDB等文档数据库,那么您必须从存储库API中删除对实体的引用。

通常,您可以向方法发送的信息越少,信息越清晰,越有表现力,也越容易阅读。通过传递ID,您的方法非常清楚,它会根据实体的ID进行删除。