实体框架代码中的IDisisable实体

时间:2012-05-12 00:02:23

标签: entity-framework design-patterns database-design ef-code-first

我的业务逻辑和核心实体紧密耦合。

  • 例如,一个名为Session的对象是一个数据库实体,但在单词的字面上是一个真实的会话,在此期间记录事件。
  • 此Session对象还具有[NotMapped]对象和非托管资源的句柄。
  • Session对象还实现了IDisposable。
  • 我项目中的一大块实体具有上述特征。

这听起来像是灾难。问题是采取什么方法。

我希望能够找到指向设计模式或架构的答案,但是请包含一个非常简短的代码示例来说明您的观点,而不仅仅是建议解决方案的名称。

到目前为止,我所想到的是从每个实体派生为业务对象,并使用代码生成从一种类型转换为另一种类型。由于这是一个客户端/服务器应用程序,我希望能够在我的桌面应用程序中使用实体关系集,尽管是派生的。

不确定如何以可持续的方式实现这一目标。

1 个答案:

答案 0 :(得分:1)

这不是关于设计模式,而是关于一次性实体的所有权。谁拥有该实体?业主负责处置。这是由您的代码/设计直接定义的。

EF上下文本身是一次性的 - 您可以覆盖其Dispose操作并强制它处置所有附加的实体,但这很可能是您不想做的事情,因为上下文很可能不是实体。从上下文请求实体或请求实体持久性的代码应被视为负责处置的所有者。