C# EF 6的WCF序列化错误

C# EF 6的WCF序列化错误,c#,.net,entity-framework,wcf,C#,.net,Entity Framework,Wcf,我正在构建一个RESTful WCF服务,它使用EF 6访问POCO。我还使用Ninject和repository模式访问数据库。以下是我的服务设置: 配置 合同 [服务合同] 公共接口ILoginService { [经营合同] [WebInvokeUriTemplate=] ErrorCollectionDTO LoginLoginRequestDTO loginRequest; } 实施 类LoginService:ILoginService { 专用只读ILoginValidator _

我正在构建一个RESTful WCF服务,它使用EF 6访问POCO。我还使用Ninject和repository模式访问数据库。以下是我的服务设置:

配置

合同

[服务合同] 公共接口ILoginService { [经营合同] [WebInvokeUriTemplate=] ErrorCollectionDTO LoginLoginRequestDTO loginRequest; } 实施

类LoginService:ILoginService { 专用只读ILoginValidator _loginValidator; 专用只读IErrorMapper\u errorMapper; 专用只读加密机; 专用只读IUserManager\u userManager; 公共登录服务ILOGINValidator登录验证程序、IErrorMapper错误映射程序、iEntryptor加密程序、IUserManager用户管理器 { _loginValidator=loginValidator; _errorMapper=errorMapper; _加密机=加密机; _userManager=userManager; } 公共错误收集到LoginLoginRequest到loginRequest { //验证请求 var completeSummary=\u loginValidator.ValidateloginRequest; //将验证错误映射到响应DTO var errorCollectionDTO=\u errorMapper.TransformcompleteSummary; //如果请求无效,则返回错误 如果!errorCollectionDTO.IsValid返回errorCollectionDTO; //此时,用户已正确验证 //所以我们准备了一个授权令牌给他 var user=\u userManager.GetUserloginRequest.CPR; var token=_encryptor.EncryptloginRequest.CPR; user.SecurityToken=新SecurityToken { 令牌=令牌, ValidUntil=DateTime.Now.AddMinutes5 }; _userManager.UpdateUseruser; 将新的LoginResponseDTOerrorCollectionDTO、token.ToString返回; } 我对所有使用[DataContract]/[DataMember]属性的请求和响应使用DTO。该服务正确地接受JSON请求。但是,我在以下行中得到一个错误:

var completeSummary=\u loginValidator.ValidateloginRequest; 调用方法尝试通过实体的存储库使用_userManager.GetUserentity.CPR检索实体的条目时:

私有IEnumerable ValidateEntityLoginRequestDTO实体 { 如果实体==null yield return new ErrorLogin请求为空或无效; 其他的 { var user=\u userManager.GetUserentity.CPR; 如果用户==null 产生返回新错误用户不存在或密码错误; } } 无法序列化类型“System.Data.Entity.DbSet`1[ITU.MAP.Domain.Model.User]”。 考虑用DATACONTractAtvices属性标记它,并标记它的所有属性 要使用DataMemberAttribute属性序列化的成员。如果类型为 一个集合,考虑用CopyDATAcNoTractAttor标记它。 据我所知,WCF试图序列化方法调用的db条目。我认为这不应该是一个问题,因为我使用DTO进行响应,而这与响应构造相去甚远。我搜索了一下,尝试了一些解决方案,如

Configuration.ProxyCreationEnabled=false; 及

Configuration.LazyLoadingEnabled=false; 当然,正如错误消息所示,我还向所有POCO添加了DataContract和DataMember属性,但没有效果

更新:这是WCF尝试序列化的POCO。我也尝试了其他非抽象类,仅使用[DataContract]和[DataMember]修饰,但出现了相同的错误。KnownType中的子类型也使用上述属性正确修饰

[DataContractsReference=true] [医学知识类型] [KnownTypeOfResident] [表格用户] 公共抽象类用户:IIdentifiable { [关键] [数据成员] [显示名称ID] 公共int Id{get;set;} [数据成员] [DisplayNameCPR] 公共字符串CPR{get;set;} [数据成员] [显示名称密码哈希] 公共字节[]密码{get;set;} [数据成员] [显示名称] 公共字符串名称{get;set;} [数据成员] [DisplayNameSurname] 公共字符串姓氏{get;set;} [数据成员] [显示名称区域] public int RegionId{get;set;} [数据成员] [显示名称区域] [ForeignKeyRegionId] 公共虚拟区域{get;set;} [数据成员] [显示名称年龄] 公共整数{get;set;} [数据成员] [显示姓名血型] 公共血型血型{get;set;} [数据成员] [恒河猴] 公共恒河猴{get;set;} [数据成员] public int?SecurityTokenId{get;set;} [数据成员] [显示名称安全令牌] [ForeignKeySecurityTokenId] 公共虚拟安全令牌安全令牌{get;set;} [数据 [委员] 公共虚拟ICollection过敏{get;set;} [数据成员] 公共虚拟ICollection条件{get;set;} [数据成员] 公共虚拟ICollection指令{get;set;} }
尝试使用数据协定来装饰类,并使用数据成员属性来装饰属性。

似乎WCF无法序列化我在泛型存储库类方法中用于返回数据库结果集合的IQueryable类型。它通过使用列表来工作,如果你问我的话,这是非常讨厌的。如果有人有比使用列表更好的建议,请提出来。

来自OP的帖子:我还向我的所有POCO添加了DataContract和DataMember属性,正如错误消息所示,但没有用。