Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储库,删除对象,模型与ID_C#_Entity Framework_Wcf_Repository Pattern - Fatal编程技术网

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

C# 存储库,删除对象,模型与ID,c#,entity-framework,wcf,repository-pattern,C#,Entity Framework,Wcf,Repository Pattern,在存储库中,什么是最好、最符合逻辑的方法 使用实体删除或通过ID删除 public void Delete(Entity item); VS. public void Delete(int Id); 我只是想知道什么是最佳实践,我应该按实体删除(在删除之前先找到对象)还是按Id删除(在方法上搜索对象,然后删除)。按Id删除是最好的选择 存储库模式是对数据库技术的抽象,因此,将存储库API与数据库技术分离得越多越好 例如,如果要切换到MongoDB之类的文档数据库,则必须从存储库API中删除

在存储库中,什么是最好、最符合逻辑的方法

使用实体删除或通过ID删除

public void Delete(Entity item);

VS.

public void Delete(int Id);

我只是想知道什么是最佳实践,我应该按实体删除(在删除之前先找到对象)还是按Id删除(在方法上搜索对象,然后删除)。

按Id删除是最好的选择

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

例如,如果要切换到MongoDB之类的文档数据库,则必须从存储库API中删除对实体的引用


通常,您可以发送给方法的信息越少,它就越清晰、更具表现力,也越容易阅读。通过传递ID,您的方法非常清楚,它是基于实体的ID进行删除的。

AFAK使用第二个选项
public void Delete(int ID)ID
是您的
主键,那么code>是最佳做法,实体将根据此ID进行检索、更新或删除,此外,如果您将存储库公开给
WebService(例如WCF)
使用int调用服务将比使用实体调用服务更快、更轻松

更新

此外,您可以向潜在客户添加两个世界都已断开连接,并且模型上定义的实体在客户端将不相同,因为您可以向prox上的分部类添加属性,只是
SOAP信封
将在服务器端解释
信封越小,通信越快


<>代码> Windows通信基础(WCF)是一种基于XML的通信基础设施。由于XML数据通常以XML 1.0规范中定义的标准文本格式进行编码,因此连接系统开发人员和架构师通常关心通过网络发送的消息的布线面积(或大小),XML的基于文本的编码对二进制数据的有效传输提出了特殊的挑战。

将域对象作为参数传递的问题是,您并不总是有实例,因此您必须创建一个仅具有id的模拟/部分对象,以满足该方法的要求,或者在删除对象之前检索该对象。两者都是低效和丑陋的

Delete方法通常只需要主键标识符就可以删除记录

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


公开签名中的主键的缺点是签名各不相同,因此内部代码生成器需要足够聪明才能处理它。任何值得使用的第三部分生成器都足够智能。

谢谢,您注意到Web服务是决定性的时刻。请将我的更新作为您老板的另一个参数:)TBH消息大小似乎无关紧要,除非您的对象实际上是一个完整的图,可能在图中包含图。主要的论点是努力,当你所需要的只是标识符时,为什么要强迫调用者提供大量无关的数据?@chrismaric我部分同意你的观点,我的目标是说明保持SOAP信封的大小越小越好,这就是为什么使用二进制协议可以执行得很快,因为数据更复杂compacted@KamelBRAHIM+1提到二进制,WCF是为TCP构建的,因此很少有人知道(然后想知道为什么它对web服务不好)
那么您必须从存储库API中删除对实体的引用。
如果这是真的,你创造了无意义的抽象。好的抽象将是不可知的变化。