【问题标题】:Problem building a custom object off an XML column/string using Entity Framework repository to POCO使用 Entity Framework 存储库到 POCO 从 XML 列/字符串构建自定义对象时出现问题
【发布时间】:2011-08-19 00:23:54
【问题描述】:
我在存储库模式中使用 Entity Framework 4.0 来填充我在另一个程序集中的 POCO 对象。我的一个对象包含来自数据库的 XML 列(类上的字符串类型)。
不幸的是,这个 XML 字符串包含我需要用来检索其他对象(使用存储库)以构建另一个自定义对象的主键 ID。我一直在尝试使用域对象上的自定义 get 访问器来执行此操作,该访问器尝试解析 XML,然后从存储库中获取。问题是这导致我的模型需要存储库并给我一个循环依赖。
有什么好的方法可以做这样的事情吗?也许一些自定义代码可以解析 EF 存储库层中的 XML 列并将我需要的内容映射到模型中的自定义对象上??
非常感谢任何回复,谢谢!
【问题讨论】:
标签:
c#
entity-framework
domain-driven-design
repository-pattern
poco
【解决方案1】:
不,没有办法告诉 EF XML 列实际上是其他实体类型。一旦将逻辑移至 get 访问器,您确实会破坏创建模型对持久性的依赖,这是您试图通过使用 POCO 删除的东西。它会破坏你的领域驱动设计。
在域驱动设计中,加载对象是存储库的严格责任。因此,您需要以允许您请求加载相关实体的方式构建您的检索方法,例如:
- 在同一个存储库方法中加载主对象、解析 XML 和加载关系
- 或在单个方法中加载主对象并在另一个方法中解析 XML 和加载关系
如果主对象不是关系的聚合根(它们可以单独存在),您应该为相关对象创建单独的存储库并公开方法以加载由 XML 字符串定义的对象。