如何通过WCF从实体数据模型中公开单个类

时间:2014-02-28 12:01:52

标签: c# wcf entity-framework

我有一个数据库,我通过Ado.net实体模型映射它,现在我想通过WCF服务从我的模型中公开一个类。如何实现?

2 个答案:

答案 0 :(得分:1)

我不确切知道您创建了哪些类,但假设您有一个名为MyClass的类。您需要添加属性DataContractDataMember,如下例所示:

[DataContract]
public class MyClass
{
    [DataMember]
    public Guid Id{ get; set; }
}

如果您使用的是Entity Framework,则默认情况下会包含这些属性。因此,您无需将它们添加到EF生成的实体中。您可以通过访问模型中生成的文件来检查它。

要考虑的一件重要事情是,如果您不使用MyClass作为参数,或者您不将其用作返回,那么在您的客户端应用程序中生成服务引用时,此类不会出现。

希望它有所帮助!

答案 1 :(得分:1)

执行此操作时要非常小心,EF类通常不能与序列化程序一起使用(如果它们具有导航属性,则根本不兼容)。

更好的方法是创建一个“克隆”类,您可以将其作为数据协定的一部分,并在两者之间创建一个转换器类(或函数)。这样只会暴露您真正关心的数据,而且您不必处理导航属性上的序列化程序。

不通过WCF直接公开EF生成类的另一个好理由是,如果模型中不重要的部分发生变化,您不一定希望更改合同。

This回答提供了如何实现这一目标的一个很好的例子。