我试图使用与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”数据合同名称“Tag_FF17EDDE6893000F7672649A39962DB0CA591C699DDB73E8C2A56203ED7C7B6D: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies ”预计不会。 考虑使用DataContractResolver或不添加静态已知的已知类型的列表中的任何类型 - 例如,通过使用KnownTypeAttribute属性或将它们添加到已知类型传递给DataContractSerializer的列表。
我看过一些文章SO( 第1条 , 第2条 ),该解决方法是添加以下属性:
[DataContract(IsReference =真)]
但这没有影响。 还使用[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; }
}