我是新来的WCF,今天我遇到了DataContracts的问题。当对象从WCF服务返回给客户端时,我收到异常。WCF - 实体框架,生成的实体序列化错误
SvcTraceViewer显示了一个异常:
类型 'System.Data.Entity.DynamicProxies.Person_7C797A477DD73534D4E8E743E1FCC1C75DAB75933D03B845A097A8B83F2DD748' 数据合同名称 “Person_7C797A477DD73534D4E8E743E1FCC1C75DAB75933D03B845A097A8B83F2DD748:HTTP://schemas.datacontract。 org/2004/07/System.Data.Entity.DynamicProxies' 不是预期的。考虑使用DataContractResolver或将任何未知的 类型静态添加到已知类型的列表中 - 例如,使用KnownTypeAttribute属性的 或将其添加到传递给DataContractSerializer的已知类型的 列表中。
我在解决方案中有几个项目。
- 数据访问(的EntityFramework EDMX文件被放在这里)
- 模型(由DbContextGenerator产生的实体在此)
- WCF服务(DataContracts在
Model
项目实施) - WPF应用程序(运行ServiceHost的)
- 控制台应用程序(调用WPF应用程序托管WCF项目或服务)
这里是在WCF操作合同:
[OperationContract]
Person[] GetAllPersons(int version);
接口的实现:
public Person[] GetAllPersons(int version)
{
return StorageService.GetAllPersons(version);
}
当数据被在客户端(ConsoleApp)收到的excepion被抛出。
我猜是因为他们是局部类
这里的问题是关系到生成的实体,是Person类:
public partial class Person
{
public Person()
{
this.Project = new HashSet<Project>();
}
public int Id { get; set; }
public Nullable<long> AddressId { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public string FirstName { get; set; }
public Nullable<long> GeoLocationId { get; set; }
public string FullGeoLocationName { get; set; }
public Nullable<long> SupervisorId { get; set; }
public Nullable<long> PositionId { get; set; }
public string Position { get; set; }
public string Office { get; set; }
public string NativeName { get; set; }
public string Location { get; set; }
public string FullName { get; set; }
public Nullable<long> PmcPersonId { get; set; }
public virtual ICollection<Project> Project { get; set; }
public virtual PersonDataVersion DataVersion { get; set; }
public virtual Workspace Workspace { get; set; }
}
我试图以纪念类和它的成员[DataContract]
和[DataMember]
属性,但错误仍然发生。 [KnownType(typeof(Person)]
属性也没有帮助。
是否可以使用生成的实体作为数据契约?
禁用LazyLoading没有帮助,但禁用代理运行良好'con.Configuration.ProxyCreationEnabled = false;'谢谢 – opewix