当 POCO 具有 IsReference = true 属性时序列化 EF 代理

2024-02-09

当实体框架代理的类被装饰时,如何序列化实体框架代码优先代理DataContractAttribute(IsReference = true)?

当将 DataContractSerializer 与 ProxyContractResolver 一起使用时,我得到以下信息:

类型“System.Data.Entity.DynamicProxies.MyType_59A83378572C10D0B31B6892FB6C3E7428C4BA214322C7A77BD5E1EB19E529CA”的 IsReference 设置为“False”,但其父类“My.Namespace.MyType”的相同设置为“True”。派生类型的 IsReference 值必须与基类型相同。更改类型设置

EF 代理生成器似乎不尊重 IsReference 属性,而我在 POCO 上确实需要该属性(否则我最终会因相互引用而出现堆栈溢出)。

在这种情况下是否有任何机制可以序列化 EF 代理?如何?


我只是做了以下非常简单的例子ProxyDataContractResolver按预期工作 - 具有周期的代理实体图已正确序列化。

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Objects;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;

namespace CFSerialization
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new Context())
            {
                context.Database.Delete();
                context.Database.CreateIfNotExists();

                context.Masters.Add(new Master
                    {
                        Name = "abc",
                        Details = new List<Detail>
                            {
                                new Detail { Name = "a" },
                                new Detail { Name = "b" },
                                new Detail { Name = "c" }
                            }
                    });
                context.SaveChanges();
            }

            using (var context = new Context())
            {
                // This will get proxied Master
                var master = context.Masters.First();

                var serializer = new DataContractSerializer(typeof(Master), new DataContractSerializerSettings()
                    {
                        DataContractResolver = new ProxyDataContractResolver()
                    });

                using (var stream = new MemoryStream())
                {
                    // This will also lazy load all details
                    serializer.WriteObject(stream, master);
                    stream.Seek(0, SeekOrigin.Begin);
                    var newMaster = (Master)serializer.ReadObject(stream);
                }
            }
        }
    }

    [DataContract(IsReference=true)]
    public class Master
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public virtual ICollection<Detail> Details { get; set; }
    }

    [DataContract(IsReference=true)]
    public class Detail 
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public virtual Master Master { get; set; }
    }

    public class Context : DbContext
    {
        public DbSet<Master> Masters { get; set; }
    }
}

您的模型中必须存在更复杂的东西来破坏功能 - 您的所有实体都标记为DataContract(IsReference=true)?

注意:我在.NET 4.5 中测试了它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 POCO 具有 IsReference = true 属性时序列化 EF 代理 的相关文章

  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List
  • 无法序列化 SolidColorBrush

    错误消息表明我无法序列化类 因为无法序列化 SolidColorBrush 该类具有 Brush 的公共属性 有解决办法吗 它更复杂 我尝试使用可以序列化的支持属性问题是我还需要冻结高光 这样我就可以在BackgroundWorker上创建
  • 如何从 JSON 获取字符串对象而不是 Unicode

    我在用着Python 2从中解析 JSONASCII 编码文本文件 当使用以下任一方式加载这些文件时json https docs python org 2 library json html or simplejson https pyp
  • EF 6:映射复杂类型集合?

    EF 6 代码优先 是否支持复杂类型集合 值对象集合 映射 我知道它支持复杂类型 但还没有找到我们拥有复杂类型集合的示例 例如 假设您有一个名为 Student 的实体 其中包含联系人集合 对于 NH 我可以简单地说 Student 有一个
  • 实体框架 6 - 使用我的 getHashCode()

    这篇文章需要了解一定的背景知识 请耐心等待 我们有一个使用 EF 的 n 层 WPF 应用程序 我们通过 dbContext 将数据从数据库加载到 POCO 类中 dbContext 被销毁 然后用户可以编辑数据 我们使用 Julie Le
  • “等待操作超时”...但仅来自 .NET 客户端?

    我有一个查询 当从我的应用程序执行时会抛出 SqlException 0x80131904 超时已过期 操作完成之前超时时间已过 或者服务器没有响应 在 Visual Studio 中单步执行代码时 我遇到了同样的错误 但是 当使用相同的凭
  • 如何简单地添加指向 Spring Data REST 实体的链接

    我有带有 Spring Data JPA 的实体 但为了生成有关它们的统计信息 我在 Spring 中使用 jOOQ Repository 由于我的方法返回一个List的实体 或Double 我如何将它们公开为链接 假设我有一个User实体
  • LINQ 按降序排序,底部为空值 [重复]

    这个问题在这里已经有答案了 我有这样的表达 troubletickets db ServiceTickets Include t gt t Company Include t gt t UserProfile troubletickets
  • 实体框架按枚举值按字母顺序排序

    我有一个名为Comment 其中有一个enum类型的属性CommentType public class Comment public virtual Guid Id get private set public virtual Comme
  • 为什么实体框架尝试选择所有列,即使我只指定了两列?

    我继承了一个 ASP MVC 项目 该项目使用 Entity Framework 6 1 3 与 Dynamics CRM 2011 SQL 数据库进行交互 我正在使用此查询来尝试获取具有帐号的所有活动帐户 并且我仅选择两列为匿名类型 va
  • EF Core 迁移可以手动编辑吗?

    我在示例项目中使用 EF Core 2 0 和一些值对象配置 我修改代码并通过 CLI 命令行生成迁移 在最后一次迁移中 它没有像应有的那样添加新的数据库表 而是尝试将现有表彼此重命名并为现有表创建一个额外的表 我不明白其中的原因 问题是
  • 对于相同的数据库对象,实体框架对象引用是否相同

    如果我从不同位置查询 逻辑上 在数据库中 相同的对象 实体框架是否返回相同的对象引用 例如 我查询了名为 Joe Black 的客户 并假设现在我知道数据库中只有一个 Joe Black Customer c select blabla w
  • EF 中的 GUID COMB 策略

    有没有办法使用 CodeFirst 设计为新的 Entity Framework 4 1 中的对象实现 Guid COMB 身份策略 我想设置StoreGeneratedPattern可以 但它仍然给我正常的 GUID 为什么要担心数据库中
  • WPF TreeView 绑定[重复]

    这个问题在这里已经有答案了 我有一个带有父级和子级属性的课程 ADO NET 实体框架分层页面类 http img148 imageshack us img148 6802 edmxxe8 gif http img148 imageshac
  • 如何获取 EF 中的实体更改增量?

    我只需要获取已更改字段的列表 数据存储区是 ssce 因此没有可用的触发器 EF 是否支持获取列表或构建通用组件 根据上下文的类型和生成的实体 您可以通过多种不同的方式来完成此操作 如果对象继承自 Entity 或 POCO 您可以使用Ob
  • 在 .NET 中序列化,在 C++ 中反序列化

    我有一个 NET 应用程序 它以二进制格式序列化对象 该对象是一个由几个字段组成的结构 我必须在 C 应用程序中反序列化并使用该对象 我不知道是否有 C 的序列化库 谷歌搜索没有出现太多 实现这一目标最快的方法是什么 提前致谢 罗伊 更新
  • 如何使用 Jackson 将列表内容序列化为平面 JSON 对象?

    给定以下 POJO public class City private String title private List
  • 实体类型 ApplicationUser 不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库

    我使用实体框架创建了一个 MVC 4 应用程序来读取数据并将数据写入我在 Azure 数据库上托管的数据库 Azure 数据库应该保存应用程序数据和应用程序的登录数据 但是 当我第一次创建应用程序时 我忘记删除到本地计算机的连接字符串 因此
  • 在 HBase 中存储和检索字符串数组

    我读过这个答案 如何将复杂对象存储到hadoop Hbase中 https stackoverflow com questions 4086684 how to store complex objects into hadoop hbase
  • 不支持 EF6 上下文类型“System.Data.Entity.Core.Objects.ObjectContext”

    我有一个使用 Visual Studio 2013 和 ADO NET 实体数据模型 EF6 创建的新项目 现在我必须使用一些动态数据函数 例如访问 MetaTable 对象 所以我添加以下代码 MetaModel model new Me

随机推荐

  • 管理 Google 地图 API 密钥

    我的应用程序使用大量 MapView 屏幕 我正在尝试找出如何管理调试环境和生产环境之间的 API 密钥 显然 无法更改 Eclipse 中的调试应用程序密钥 因此我必须在该环境中使用调试映射 API 密钥 相反 如果没有生产应用程序密钥
  • AS3 处理任意大文件

    我正在尝试读取 AS3 中的一个非常大的文件 但我遇到了运行时崩溃的问题 我目前正在使用文件流 http help adobe com en US Flex 4 0 langref flash filesystem FileStream h
  • NHibernate.LazyInitializationException

    我们一直偶尔会出现这个问题 但现在我每次都可以重现它 我正在增加自定义论坛上的查看计数器 这会导致错误 NHibernate LazyInitializationException 未能延迟初始化集合 没有会话或会话被关闭 此错误发生在对象
  • 从 virtualenv 中启动 wsgi 应用程序作为 Linux 系统服务

    我目前正在 virtualenv 中开发一个 Bottle 应用程序 我打算使用 bjoern WSGI 服务器来提供它 但这可能并不重要 我还打算使用 lighty 或 nginx 反向代理来为应用程序提供服务 无论如何 应用程序可以作为
  • ECS任务如何知道在哪个区域运行?

    我有一个在 ECS 启动的任务中使用 boto3 的 python 应用程序 在 docker 容器中 我使用的 boto3 命令需要一个区域才能正常工作 但我只知道运行时的区域 多区域应用程序 当时的想法是定义AWS DEFAULT RE
  • 在 if 条件下改变字符串变量

    我使用这个程序将输入 mm 作为一年中的月份并打印出月份的名称 include
  • 如何根据 UIAlertController 中的 UITextField 禁用 UIAlertAction?

    我正在使用一个UIAlertController向用户呈现一个对话框以输入5 位 CRN 我想要Add按钮将被禁用 直到字段中有五位且仅有五位数字 UITextField 用户界面如下所示 以下是为以下内容设置的属性UIAlertContr
  • 如何从 docker 镜像中删除 ENV 设置

    我有一个设置 HOME 和 PATH 的 docker 映像 config HOME 我知道我可以替换它 但是是否可以删除它 并使用正常的 bash 配置文件设置 我不想通过破解 shell 配置文件来覆盖它 我无法让 creack 的答案
  • Java 6正则表达式一组的多个匹配

    这是简单的模式 key value1 value2 value3 valueN 我想得到 key 值数组 这是我的正则表达式 这是我的文字 foo a b c d Matcher给了我 2 组 foo 作为键 和d 作为值 如果我使用 代替
  • Java 硬件中断处理

    我想知道当硬件中断发生时是否可以自动调用Java方法 可能还有其他选择 我正在做类似的事情 在一个应用程序中 我监视 4 只鼠标的点击情况 这些点击会产生中断 但我很高兴不直接从 Java 处理它们 在Linux下 原来有设备文件 dev
  • 检查角度 2 中是否存在路线

    我想检查角度项目中是否存在路线 例如用户类型http localhost 4200 timestamp在网址栏中和timestamp项目中不存在 如何在不重定向的情况下进行检查 Sajeetharan 的回答涉及router config是
  • 如果命令在 mac 终端内运行,如何让 shell_exec 表现得像命令一样?

    当我在 php 脚本中运行命令时 echo shell exec which php 我得到以下输出 usr bin php 但是 当在 mac 终端中运行相同的命令时 which php 我得到以下输出 php aliased to Ap
  • Django 管理命令导入错误

    我在导入模块时遇到问题qsl management commands
  • SQL Server 中符号 @@ 的含义

    符号的含义是什么 在 SQL Server 中 在 SQL Server 中 符号 是全局变量的前缀 服务器维护所有全局变量 我们不能宣布它们
  • 了解模板方法模式

    据我了解 模板方法只不过是调用子类中定义的虚拟或抽象方法的普通方法 我是对的吗 还是我错过了关于这种模式的其他重要内容 abstract class Foo public void IamTemplateMethod which will
  • 将大型网站从 MySQL 切换到 MySQLi [重复]

    这个问题在这里已经有答案了 我想从 MySQL 切换到 MySQLi 但我有一个非常大的网站 我读到了https wikis oracle com display mysql Converting to MySQLi https wikis
  • 使用 std::map/boost::unordered_map 帮助理解段错误

    我有一些代码使用模板静态类来处理资源 图像 字体 网格数据等 管理 允许客户端代码执行以下操作 ResourceManager
  • Angular:在 [innerHtml] 内绑定变量

    我正在尝试使用 innerHtml 在 div 内绑定数据 如何通知 Angular 使用变量而不是原始文本 这是我的设置 div div div div div div 数据如下 someOtherData id 1 template d
  • 在 Java 字符串中添加新行

    我希望我的输出是多行但是 n似乎不适合我 难道我做错了什么 谢谢 期望的输出 你好 姓名 重量 公斤 XX 高度 米 XX BMI XX CODE SimpleOutput showInformation Hello name n Weig
  • 当 POCO 具有 IsReference = true 属性时序列化 EF 代理

    当实体框架代理的类被装饰时 如何序列化实体框架代码优先代理DataContractAttribute IsReference true 当将 DataContractSerializer 与 ProxyContractResolver 一起