相关疑难解决方法(0)

我应该使用实体框架4.1和MVC3启用还是禁用动态代理?

有人可以提供一些建议或指出一些可以帮助做出这个决定的博客/文章吗?代理对我来说似乎很陌生,我对使用它们犹豫不决.我喜欢通过在我的模型中使用虚拟属性来控制延迟加载的能力,但这几乎是我能看到的所有好处.我的应用程序是一个简单的MVC Web应用程序,当实体遇到更改状态时,我不需要将任何挂钩连接到上下文中.

无论如何,这是我现在非常有限的利弊列表,让我知道如果我没有任何这个.

优点

  • 在"保存"或"更新"中,我与"Apply'Changes"无缝对接
  • 延迟加载配置非常简单.

缺点

  • 从来没有为我的实体使用代理,这是一种方法的改变,对我自己和团队成员来说似乎不舒服.
  • 调试很尴尬.
  • 如果我想要序列化/反序列化,则需要额外的代码
  • 在"保存"或"更新"时,代理必须是从上下文中检索的同一对象.

orm entity-framework dynamic-proxy ef-code-first entity-framework-4.1

68
推荐指数
2
解决办法
5万
查看次数

具有一对多关系的实体框架对象的序列化

我试图使用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)

c# entity-framework .net-4.5

34
推荐指数
1
解决办法
4万
查看次数