0

我的业务逻辑和核心实体紧密耦合。实体框架中的一次性实体代码优先

  • 的对象,例如,被称为会话是数据库实体,而是在这个词的字面意义是在此期间,事件记录现实生活中的会话。
  • 此会话对象还具有[NotMapped]对象并处理非托管资源。
  • Session对象还实现了IDisposable。
  • 我的项目中有一大块实体具有上述特征。

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

我期待指向设计模式或体系结构的答案,但请包括一个非常简短的代码示例来说明您的观点,而不仅仅是提出的解决方案的名称。

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

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

+0

紧密耦合将是快速接近的灾难...... –

回答

1

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

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

+0

重写'Dispose'是一个很好的指针,谢谢。然而,在我的情况下,我的实体类提供了像办公室互操作应用程序之类的东西。正如我可以想象的那样,构造函数,初始化方法和析构函数都会导致这些引用被调用。问题是这些引用只能在客户端访问。因此问题是:我应该如何重新考虑这一点。 –

+0

通过解耦您的实体和那些非托管资源。 –

+0

我想问的是如何构造它。针对每个这样的实体创建继承的业务对象?使用组合?其他一些众所周知的技术? –