我是新來的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