Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 使用WCF创建WPF智能客户端时,将数据库Id和其他数据返回到ViewModel_C#_Wpf_Wcf_Mvvm - Fatal编程技术网

C# 使用WCF创建WPF智能客户端时,将数据库Id和其他数据返回到ViewModel

C# 使用WCF创建WPF智能客户端时,将数据库Id和其他数据返回到ViewModel,c#,wpf,wcf,mvvm,C#,Wpf,Wcf,Mvvm,我正在创建一个WPF智能客户端应用程序,它在后端使用WCF和NHibernate。我正在取得良好的进展,但对于如何从WCF服务获取数据包以启用WPF智能客户端中的按钮/功能,我有一个问题 目前,我有一个CreateProduct屏幕,它最终将WCFProductService.CreateProduct(ProductDTO productDetails)调用到WCF服务。这可以很好地工作,并在数据库中创建产品记录。CreateProduct方法当前不返回任何内容 我不想在内存中创建一个巨大的D

我正在创建一个WPF智能客户端应用程序,它在后端使用WCF和NHibernate。我正在取得良好的进展,但对于如何从WCF服务获取数据包以启用WPF智能客户端中的按钮/功能,我有一个问题

目前,我有一个CreateProduct屏幕,它最终将WCFProductService.CreateProduct(ProductDTO productDetails)调用到WCF服务。这可以很好地工作,并在数据库中创建产品记录。CreateProduct方法当前不返回任何内容

我不想在内存中创建一个巨大的DTO,然后通过网络发送它。我的目标是沿着创建产品的路线做更多的事情,然后添加一些东西,作为单独的任务添加一些其他的东西

为此,我有一个按钮AddAttribute。AddAttribute必须在WCF服务级别的产品上下文中工作,因此我需要在AddAttributeTo中发送ProductId。当然,在这个阶段ProductDTO中没有Id,因为它在发送到WCF服务之前完全是在内存中创建的

我假设WCF服务调用CreateProduct将需要返回某种包含Id和其他数据的对象

这应该采取什么形式
是否有关于这方面的指导/最佳实践的文件
然后我如何使用此选项启用相关按钮?

提前感谢您的帮助


Alex

您可以简单地将DTO返回给消费者,添加您需要的任何信息

public class AddProductResponse
{
    public string ProductId { get; set; }
}
你的运营合同看起来像

public AddProductResponse AddProduct(YourProductDto dto)
{
}

我还想补充一点,您关于在现有产品中添加“部件”的想法可能有些过头了。除非你的产品包含100000个属性,否则它不会消耗你应该担心的内存。使用一个DTO以及相应的添加、更新等方法进行维护会更干净、更简单。

谢谢Chris,很高兴知道我做得对。您的意思是YourProductDto上会有AddAttribute之类的方法吗?添加“部件”后,实际上并不是内存消耗的问题,而是数据丢失的问题。获取订单行-在内存中输入100行-电脑严重崩溃导致应用程序死机-如果向现有订单中添加零件,您将丢失所有100行订单,而不是只有一行。@lostinwpf。dto就是数据。没有方法,只有属性。在您的订购场景中,那么是的,创建订单然后向其中添加行项目可能会有所帮助。只是厌倦了在ServiceContract中为此创建其他方法。