Tôi đang cố gắng sử dụng EF với Mã đầu tiên và API Web. Tôi không có bất kỳ vấn đề gì cho đến khi tôi bắt đầu theo dõi các mối quan hệ Nhiều-nhiều. Khi tôi cố gắng để thực hiện phương pháp web api sau dưới đây tôi nhận được thông báo lỗi sau:Nối tiếp các đối tượng Khung thực thể có mối quan hệ một đến nhiều
public class TagsController : ApiController
{
private BlogDataContext db = new BlogDataContext();
// GET api/Tags
public IEnumerable<Tag> GetTags()
{
return db.Tags.AsEnumerable();
}
}
tôi nhận được lỗi sau:
'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.
Tôi đã đọc một số SO bài viết (article 1, article 2) mà sửa chữa là thêm thuộc tính sau:
[DataContract (IsReference=true)]
nhưng điều này không có hiệu lực. Cũng sử dụng [IgnoreDataMember] không có hiệu lực. Tùy chọn duy nhất có vẻ hoạt động là đặt Configuration.ProxyCreationEnabled thành false. Đây có phải là lựa chọn duy nhất của tôi không? Tui bỏ lỡ điều gì vậy?
đối tượng mẫu POCO:
Tag
[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; }
}
Blog
[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; }
}
tôi đã có vấn đề chính xác cùng, và tôi thấy giải pháp duy nhất là như bạn, và Erik Philips, đã nói. Để tắt tính năng tạo proxy. Lý do 'IgnoreDataMember' không có hiệu lực là vì vấn đề là với việc tạo proxy, không phải là sự tuần tự hóa' ICollection' của 'Thẻ'. –
Tôi có cùng một vấn đề, bạn đã giải quyết nó như thế nào? Khi tôi vô hiệu hóa tạo proxy sau đó tôi không thể có được các giá trị của phụ huynh, mà tôi cần nó. làm ơn giúp tôi. –