我有一个数据库,我通过Ado.net实体模型映射它,现在我想通过WCF服务从我的模型中公开一个类。如何实现?
答案 0 :(得分:1)
我不确切知道您创建了哪些类,但假设您有一个名为MyClass
的类。您需要添加属性DataContract
和DataMember
,如下例所示:
[DataContract]
public class MyClass
{
[DataMember]
public Guid Id{ get; set; }
}
如果您使用的是Entity Framework,则默认情况下会包含这些属性。因此,您无需将它们添加到EF生成的实体中。您可以通过访问模型中生成的文件来检查它。
要考虑的一件重要事情是,如果您不使用MyClass
作为参数,或者您不将其用作返回,那么在您的客户端应用程序中生成服务引用时,此类不会出现。
希望它有所帮助!
答案 1 :(得分:1)
执行此操作时要非常小心,EF类通常不能与序列化程序一起使用(如果它们具有导航属性,则根本不兼容)。
更好的方法是创建一个“克隆”类,您可以将其作为数据协定的一部分,并在两者之间创建一个转换器类(或函数)。这样只会暴露您真正关心的数据,而且您不必处理导航属性上的序列化程序。
不通过WCF直接公开EF生成类的另一个好理由是,如果模型中不重要的部分发生变化,您不一定希望更改合同。
This回答提供了如何实现这一目标的一个很好的例子。