C# 仅在WCF服务中建模,还是需要在客户端中创建副本?

C# 仅在WCF服务中建模,还是需要在客户端中创建副本?,c#,nhibernate,fluent-nhibernate,mvvm-light,data-transfer-objects,C#,Nhibernate,Fluent Nhibernate,Mvvm Light,Data Transfer Objects,我正在构建一个应用程序。我正在MVVM Light的帮助下创建Silverlight 4客户端。我正在从WCF服务获取数据。至少,这是计划 在WCF服务中,我定义了我需要在应用程序中使用的“实体”。在Silverlight客户端中添加对WCF服务的引用时,VisualStudio会在客户端重新创建在服务中用属性[DataContract]标记的所有类 我想知道的是,这是否是一种不好的做法,在客户机内部创建模型是否更好。据我所知,在第一种情况下,我应该只在Silverlight客户端中创建View

我正在构建一个应用程序。我正在MVVM Light的帮助下创建Silverlight 4客户端。我正在从WCF服务获取数据。至少,这是计划

在WCF服务中,我定义了我需要在应用程序中使用的“实体”。在Silverlight客户端中添加对WCF服务的引用时,VisualStudio会在客户端重新创建在服务中用属性[DataContract]标记的所有类

我想知道的是,这是否是一种不好的做法,在客户机内部创建模型是否更好。据我所知,在第一种情况下,我应该只在Silverlight客户端中创建ViewModels和视图,而在第二种情况下,我应该在Silverlight客户端中创建视图、ViewModels和模型,并使用来自WCF服务的值填充模型实例

谢谢你的帮助

干杯, G

更新

好的,我认为我的问题不够清楚,因为我没有收到很多反馈。 不过,我想提供一个更新。我想要的答案是“不!数据传输对象!”

我想在WCF服务中使用我的实体类(映射到DB表的实体类)作为DataContract。在客户机中添加对此WCF服务的引用也会在客户机上创建所有用DataContract修饰的类

在我的例子中,最大的问题是数据层基于Hibernate,soemtimes在运行时广泛使用“数据代理”类(参见Castle proxy)。事实证明,这些数据代理存在序列化问题,据我所知,最好的方法是采用数据传输对象模式,以便将“复杂”实体映射到类似但“较轻”的类(DTO)

我希望这能帮助其他人

祝你今天愉快!
吉安卢卡。

你和Nhibernate一起看过WCF RIA吗?不过,为了尝试回答这个问题:我不会尝试直接从WCF服务返回实体,我个人会创建DTO。然后我可能会将这些DTO映射到某种客户端模型。所以,如果我不能利用RIA,我会尝试这么做。

嗨,德里克。是的,我使用的是WCF RIA+FluentNHibernate。正如我在文章的“更新”部分所说,我了解DTO,这就是实现DTO的方式。不过,我承认我转向了EntityFramework和RIA服务。