【问题标题】:How to get rid of the suffix on object names added by EF?如何摆脱 EF 添加的对象名称的后缀?
【发布时间】:2015-12-24 23:05:47
【问题描述】:

当我使用 EF 获取一堆对象并将它们添加到返回的数组中时,我注意到智能感知提供给我的类型不仅仅是类的名称。它还包含一个后缀,因此名为 Donkey 的类看起来像这样。

System.Data.Entity.DynamicProxies.Donkey_9D8D...EB8F

我需要它出现在属于我自己的命名空间的表单上。

FarmSpace.Donkey

我怎样才能变成那样?一种方法是构建复制器,但我觉得有一种更聪明的方法。或者至少是一种自动的方法。

原因是当我尝试返回 EF-donkeys 时收到错误 502,但如果我使用自己的对象,它似乎可以工作。我已经在单独的question 中提出了这个问题,但没有得到太多回应(可能是因为假期或其他原因),所以我正在尝试部署下一个最好的解决方法。

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    我不是 100% 清楚您要做什么,或者为什么 EF 代理对您来说是个问题。但如果您真的想摆脱代理(以延迟加载和自动更改跟踪为代价),您可以将其关闭。

    请参阅 Working with Proxies 了解如何执行此操作以及更多信息。

    禁用代理创建

    有时阻止实体框架创建代理实例很有用。例如,序列化非代理实例比序列化代理实例要容易得多。可以通过清除ProxyCreationEnabled 标志来关闭代理创建。您可以在上下文的构造函数中执行此操作。例如:

    public class BloggingContext : DbContext 
    { 
        public BloggingContext() 
        { 
            this.Configuration.ProxyCreationEnabled = false; 
        }  
    
        public DbSet<Blog> Blogs { get; set; } 
        public DbSet<Post> Posts { get; set; } 
    }
    

    【讨论】:

    • 好吧,我不是说这个是我想做的,呵呵。我是说当我返回被跟踪的对象(类名中带有后缀的对象)时,我在网页上收到错误消息。当我实际创建一个副本(以便对象具有较短的类型)时,它运行良好。我完全愿意解决这个问题,以便返回跟踪的版本也可以,但我有点卡在那里(如果你觉得大胆,请参阅链接的问题了解详细信息)。
    • Station 中有一个链接实体指向 Records,当我尝试复制它时,我复制了个人站,问题又出现了。但是,我使用 Include 并没有改善任何东西......
    • 我很乐意提供进一步的帮助,但在您收到的 502 后面的某处是带有堆栈跟踪的实际错误消息。如果您发现它并将其发布在此处,则可以更轻松地找到问题的实际原因并进行适当的修复。同时,关闭代理创建至少可以作为调试工具来确定问题是否真的与代理有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多