Entity framework 首先是实体框架代码中的IDisposable实体

Entity framework 首先是实体框架代码中的IDisposable实体,entity-framework,design-patterns,database-design,ef-code-first,Entity Framework,Design Patterns,Database Design,Ef Code First,我的业务逻辑和核心实体紧密耦合 例如,一个名为Session的对象是一个数据库实体,但从字面上来说,它是一个真实的会话,在这个会话中记录事件 此会话对象还具有指向非托管资源的[NotMapped]对象和句柄 会话对象还实现IDisposable 我的项目中有很多实体都具有上述特征 这听起来像是一场灾难。问题是在这里采取什么方法 我希望答案指向设计模式或架构,但请包含一个非常简短的代码示例来说明您的观点,而不仅仅是建议解决方案的名称 到目前为止,我想到的是将每个实体作为业务对象进行派生,并使用

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

  • 例如,一个名为Session的对象是一个数据库实体,但从字面上来说,它是一个真实的会话,在这个会话中记录事件
  • 此会话对象还具有指向非托管资源的[NotMapped]对象和句柄
  • 会话对象还实现IDisposable
  • 我的项目中有很多实体都具有上述特征
这听起来像是一场灾难。问题是在这里采取什么方法

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

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


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

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


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

紧密耦合的将是即将到来的灾难…覆盖
Dispose
是一个很好的指针,谢谢。然而,在我的例子中,我的实体类引用了office互操作应用程序之类的东西。我相信您可以想象,构造函数、初始值设定项和析构函数会导致调用这些引用。问题是这些引用应该只在客户端访问。因此,问题是:我应该如何重新思考这个问题。我想问的是如何构建它。是否针对每个这样的实体创建继承的业务对象?使用构图?其他一些著名的技术?