Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为具有多个客户端的应用程序使用实体框架_C#_Mysql_Wpf_Entity Framework_Entity Framework 6 - Fatal编程技术网

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

C# 如何为具有多个客户端的应用程序使用实体框架,c#,mysql,wpf,entity-framework,entity-framework-6,C#,Mysql,Wpf,Entity Framework,Entity Framework 6,我创建了一个管理酒店、房间、预订和客户的应用程序。在第一个版本中,我使用纯MySQL命令与数据库通信,工作得很好,但很难实现,主要是当我需要更改属性的名称或数据库中的顺序以及复杂实体中的相对命令时,而且获取结果也很慢。所以我尝试使用实体框架来实现它。 从那以后,我面对了太多的问题,我一直在努力解决。首先,我的应用程序由两个客户端使用,我需要同步数据。EF正在缓存数据以获得更快的结果,即使它们在数据库中发生更改。据我所知,EF不检查数据是否为最新数据,我找到的解决方案是: 重新加载或分离每一个实体

我创建了一个管理酒店、房间、预订和客户的应用程序。在第一个版本中,我使用纯MySQL命令与数据库通信,工作得很好,但很难实现,主要是当我需要更改属性的名称或数据库中的顺序以及复杂实体中的相对命令时,而且获取结果也很慢。所以我尝试使用实体框架来实现它。 从那以后,我面对了太多的问题,我一直在努力解决。首先,我的应用程序由两个客户端使用,我需要同步数据。EF正在缓存数据以获得更快的结果,即使它们在数据库中发生更改。据我所知,EF不检查数据是否为最新数据,我找到的解决方案是:

  • 重新加载或分离每一个实体—在拥有300个房间或2000个客户时有些糟糕
  • 处置和重新创建上下文-这是我试图做的,但似乎很难实现,因为我的应用程序可以在同一时间有3个或4个窗口,然后我需要在每个组合框中重新加载ItemSource并列出,否则当我再次使用它时,会引发异常,如“context is disposed”或“实体更改由多个跟踪器跟踪”或“外键未公开”等。同样,这样会丢失更改跟踪器
  • 另一个大问题是,当我暂时不使用我的应用程序,然后访问试图通过延迟加载获取的实体的属性时,如果达到连接或命令超时,它可能会崩溃。可能可以通过异常处理解决,但我认为EF可以管理这类事情

    问题是我需要变更跟踪器来更新实体,我还使用MVVMlight和我在互联网上找到的通用存储库UnitOfWork。

    我的应用程序是WPF 4.7.2

    有什么建议吗?我应该使用其他框架与数据库通信吗?我应该使用其他类型的数据库吗?其他编程语言


    另一个

    我知道你不会想听这个问题,但这个问题没有“一刀切”的答案。人们把整个职业生涯都奉献给解决这样的问题

    我在航空业工作,全世界有成千上万的信息亭、终端、手机应用程序等,都在访问同一个数据库同时,他们中的许多人需要实时通信,尽管他们坐在最严密的防火墙后面…和最脆弱的机场网络后面…你会看到。作为一个非常粗略的指导原则,我倾向于通过web服务器公开数据库,并让所有东西都通过web服务器连接。对于实时内容,我使用WebSocket(当网络不支持长轮询时,可以模拟长轮询),但非关键内容通常可以通过基本的REST调用来处理;这两种技术都有足够的JavaScript支持,这对于何时(而不是如果)很重要你最终会开发任何类型的webapp组件。一般来说,我避开SOAP;如果你已经控制了通信渠道的双方,那么没有必要增加额外的复杂性,除非你有理由这样做

    这样做的好处是,您最终会得到一个包含所有项目共享的所有模型的单个项目,这反过来会导致出色的类型安全性和代码重用。组件之间的序列化通常由.NET自动处理,并且很容易使您的数据库层受到压力s在真实环境中进行测试。您还有一个集中的日志记录和报告生成点,这是您的客户在某个时候需要的(分析本身就是一个完整的领域)。另一方面,添加专用服务器会增加额外的复杂性和潜在的故障点,如果必须在本地托管,则会增加安装过程的复杂性,可能还会增加客户端网络配置的复杂性


    这是一个答案,还有很多。一旦你开始遇到服务器负载和冗余等问题,一切都变得非常“有趣”“…

    我理解这一点。一个完全不同的实现是在服务器上完成所有工作人员的工作,但现在我只使用服务器存储数据库,而我在客户机上完成所有计算。这就是为什么我更愿意尝试使用实体框架或类似的方法来完成这项工作。