Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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从实体数据模型公开单个类_C#_Wcf_Entity Framework - Fatal编程技术网

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

C# 如何通过WCF从实体数据模型公开单个类,c#,wcf,entity-framework,C#,Wcf,Entity Framework,我有一个数据库,我通过Ado.net实体模型映射它,现在我想通过WCF服务从我的模型中公开一个类。如何实现它?我不知道您创建了哪些类,但假设您有一个名为MyClass的类。您需要添加属性DataContract和DataMember,如以下示例所示: [DataContract] public class MyClass { [DataMember] public Guid Id{ get; set; } } 如果您使用的是实体框架,则默认情况下会包含该属性。因此,您不需要将它

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

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

[DataContract]
public class MyClass
{
    [DataMember]
    public Guid Id{ get; set; }
}
如果您使用的是实体框架,则默认情况下会包含该属性。因此,您不需要将它们添加到EF生成的实体中。您可以通过访问模型内部生成的文件来检查它

一个重要的事情是,如果您不使用<代码> MyClass <代码>作为参数,或者不使用它作为返回,那么在您的客户端应用程序中生成服务引用时,该类就不会出现。


希望有帮助

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

更好的方法是创建一个“克隆”类,将其作为数据契约的一部分,并创建一个转换器类(或函数)来介于两者之间。这样,只有您真正关心的数据才会被公开,您不必处理序列化程序在导航属性上的问题

不直接通过WCF公开EF生成的类的另一个很好的理由是,若模型的一个不重要的部分发生了变化,您不一定希望契约发生变化

答案为如何实现这一点提供了一个很好的例子