如何在两个应用程序之间共享实体框架?

Posted

技术标签:

【中文标题】如何在两个应用程序之间共享实体框架?【英文标题】:How to share Entity Framework between two applications? 【发布时间】:2020-07-26 05:32:58 【问题描述】:

我在同一个解决方案中有四个 VS 项目,架构如下:

管理应用程序 -> 服务 -> 存储库 最终用户应用程序 -> 服务 - 存储库

AdminUser 项目共享相同的层 Service / Repository 但每个层都有自己的服务器(user.domain.comadmin.domain.com),因此它们位于不同的 IIS 池中。

我单独发布它们,但是,当我在管理员中进行一些更改时,由于实体框架缓存,它不会对最终用户的应用程序产生任何影响。我的存储库使用静态上下文,我无法丢失实体更改,因此无法将其转换为本地上下文。

我在用户的应用中试过这个:

foreach (var entity in _context.ChangeTracker.Entries())

     entity.Reload();

工作,但应用程序太慢了。

有没有一种好方法可以在两个不同的应用程序中使用相同的 EF 层来识别数据库更改?

或者只禁用User的应用缓存..

我正在使用 EF6 和 .NET 4.6.1

谢谢

【问题讨论】:

"我不能丢失实体更改,因此我不能将其转换为本地上下文。"这是什么意思? 【参考方案1】:

我的存储库使用静态上下文

不要那样做。上下文应该是瞬态的,或者限定在 HTTP 请求的范围内。

【讨论】:

以上是关于如何在两个应用程序之间共享实体框架?的主要内容,如果未能解决你的问题,请参考以下文章

如何在两个 .NET AppDomain 之间传递未知类型?

实体框架 - 如何缓存和共享只读对象

实体框架代码优先关系 - 如何定义两个对象之间的关系:两个实体之间的可选一对一

ASP.Net 分层应用程序 - 在层之间共享实体数据模型

如何在实体框架中的两个表之间进行左连接操作时从左表中选择唯一行

如何让asp.net成员提供者和实体框架共享同一个数据库