我試圖使用與EF代碼第一次和Web API。在進入序列化多對多關係之前,我沒有任何問題。當我嘗試下面我收到以下錯誤消息,執行以下Web API方法:序列化與一個實體框架對象的一對多關係
public class TagsController : ApiController
{
private BlogDataContext db = new BlogDataContext();
// GET api/Tags
public IEnumerable<Tag> GetTags()
{
return db.Tags.AsEnumerable();
}
}
我收到以下錯誤:
'System.Data.Entity.DynamicProxies.Tag_FF17EDDE6893000F7672649A39962DB0CA591C699DDB73E8C2A56203ED7C7B6D' with data contract name 'Tag_FF17EDDE6893000F7672649A39962DB0CA591C699DDB73E8C2A56203ED7C7B6D: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies ' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
我看過一些SO文章(article 1,article 2),其修復方法是添加以下屬性:
[DataContract (IsReference=true)]
但這沒有效果。同樣使用[IgnoreDataMember]不起作用。這似乎工作的唯一選擇是Configuration.ProxyCreationEnabled設置爲false。這是我唯一的選擇嗎?我錯過了什麼嗎?
樣品POCO對象:
標籤
[DataContract(IsReference = true)]
public class Tag
{
public Tag()
{
this.Blogs = new HashSet<Blog>();
}
[Key]
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[IgnoreDataMember]
public virtual ICollection<Blog> Blogs { get; set; }
}
博客
[DataContract(IsReference = true)]
public class Blog
{
public Blog()
{
this.Tags = new HashSet<Tag>();
}
[Key]
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[IgnoreDataMember]
public virtual ICollection<Tag> Tags { get; set; }
}
我有完全相同的問題,我發現的唯一的解決辦法是爲你,埃裏克飛利浦曾表示。關閉代理創建。究其原因'IgnoreDataMember'沒有效果是因爲問題出在代理生成,不Tags'的'了'ICollection'的系列化。 –
我有同樣的問題,你是如何解決它的? 當我禁用代理的創建,然後我不能得到家長的價值觀,這是我需要它。 PLZ幫助我。 –