如何为具有多个客户端的应用程序使用实体框架

a0x5cqrl  于 2021-06-16  发布在  Mysql
关注(0)|答案(1)|浏览(273)

我创建了一个管理酒店、客房、预订和客户的应用程序。在第一个版本中,我使用纯mysql命令与数据库进行通信,工作得很好,但实现起来相当困难,主要是当我需要更改属性的名称或数据库中的顺序以及复杂实体中的相对命令时,而且获取结果也很慢。所以我试着用实体框架来实现它。从那时起,我面临了太多的问题,我试图去周围。首先,我的应用程序由两个客户端使用,我需要同步数据。ef正在缓存数据以获得更快的结果,即使它们在db处发生了变化。据我所知,ef不检查数据是否最新,我找到的解决方案是:
重新加载或分离每一个实体—在拥有300个房间或2000个客户的情况下是不好的
释放和重新创建上下文-这是我试图做的,但似乎很难实现,因为我的应用程序可以在同一时间有3或4个窗口,然后我需要在每个组合框中重新加载itemsource并列出,否则当我再次使用它时,会抛出异常,如“上下文被释放”或“实体更改被许多跟踪器跟踪”或“外键未暴露”等。这样也会丢失更改跟踪器。
另一个大问题是,当我有一段时间不使用我的应用程序,然后访问试图通过延迟加载获取的实体的属性时,如果达到连接或命令超时,它可能会崩溃。也许可以通过异常处理来解决,但我认为ef可以处理这类事情。
问题是我需要change tracker来更新实体,我还使用mvvmlight和一个通用的存储库,我在互联网上找到了unitofwork。https://cpratt.co/truly-generic-repository/
我的应用程序是wpf4.7.2
有什么建议吗?我是否应该使用其他框架与数据库通信?我应该使用其他类型的数据库吗?其他编程语言?
另一个

6mw9ycah

6mw9ycah1#

我知道你不会想听这个,但这个问题没有“一刀切”的答案。人们把整个职业生涯都奉献给解决这样的问题。
我在航空业工作,全世界有成千上万的信息亭、终端、手机应用程序等同时访问同一个数据库,其中许多人需要实时通信,尽管他们坐在最严密的防火墙后面…和最脆弱的机场网络…你会看到的。作为一个非常粗略的指导方针,我倾向于通过一个web服务器公开数据库,并让所有的东西都通过这个服务器连接起来。对于实时的东西,我使用websockets(当网络不支持它时,可以用长轮询来模拟),但是非关键的东西通常可以用基本的rest调用来处理;这两种技术都有足够的javascript支持,这对于最终开发任何类型的webapp组件的时间(而不是是否)都很重要。一般来说,我避开肥皂;如果你已经控制了一个通信通道的两边,那么就没有必要增加额外的复杂性,除非你有理由这么做。
这样做的好处是,您最终会得到一个包含所有项目共享的所有模型的单个项目,这反过来又会导致出色的类型安全性和代码重用。组件之间的序列化通常由.net自动处理,在实际环境中很容易对数据库层进行压力测试。您还有一个用于日志记录和报告生成的集中点,这是您的客户在某个时候需要的(分析本身就是一个完整的领域)。另一方面,专用服务器的增加增加了额外的复杂性和潜在的故障点,如果您必须在本地托管它,那么它将增加安装过程的复杂性,也可能会增加客户端网络配置的复杂性。
这是一个答案,还有很多。一旦你开始进入服务器加载和冗余的问题,这一切都开始变得非常“有趣”。。。

相关问题