有人可以提供一些建议或指出一些可以帮助做出这个决定的博客/文章吗?代理对我来说似乎很陌生,我对使用它们犹豫不决.我喜欢通过在我的模型中使用虚拟属性来控制延迟加载的能力,但这几乎是我能看到的所有好处.我的应用程序是一个简单的MVC Web应用程序,当实体遇到更改状态时,我不需要将任何挂钩连接到上下文中.
无论如何,这是我现在非常有限的利弊列表,让我知道如果我没有任何这个.
优点
缺点
orm entity-framework dynamic-proxy ef-code-first entity-framework-4.1
我试图使用EF与Code First和Web API.在我开始序列化多对多关系之前,我没有任何问题.当我尝试执行下面的web api方法时,我收到以下错误消息:
public class TagsController : ApiController
{
private BlogDataContext db = new BlogDataContext();
// GET api/Tags
public IEnumerable<Tag> GetTags()
{
return db.Tags.AsEnumerable();
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
"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 = 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> …Run Code Online (Sandbox Code Playgroud)