【发布时间】:2009-07-28 02:20:38
【问题描述】:
我一直在研究在我的 C# 游戏服务器中使用实体框架来简化查询。我是类型安全的忠实拥护者,Entity Framework 在自动化大多数样板代码方面做得很好。虽然我不太确定如何使用一些组件,即ObjectContext。
服务器使用了很多线程,所以线程安全是一个问题。现在我只是使用自定义池来执行查询。无需赘述,每个查询的工作方式如下:
- 获取
DbConnection - 获取
DbCommand - 允许查询类设置参数
- 执行
DbCommand - 允许查询类处理查询结果(如果有)
- 释放
DbCommand - 释放
DbConnection
它非常干净、快速和安全,但问题是创建查询有点麻烦,如果我想要类型安全,我必须手动生成和更新“容器类”。这就是我转向实体框架的原因。
这一切都适用于仅使用DbConnection 和DbCommand,因为不用担心哪个DbConnection/Command 执行查询哪个对象或任何东西。
无论如何,我真的不知道如何在不施加限制的情况下进行更多解释。每次我通常使用DbConnection/Command 执行查询、保存它并处理 ObjectContext 时都会执行一些操作,这只会增加太多开销,而我真的不需要如此频繁地更新数据库。
如果游戏服务器对数据库的即时和持续更新要求不高,您将如何使用 Entity Framework?
【问题讨论】:
-
您的问题具体是什么?如果您的数据库不经常更新,那么 DataContext 不会造成巨大的开销。你确实处理了你的 dbcommands 和 dbconnections?
-
很抱歉给您带来了困惑。数据库更新频繁,但数据读取频率很低。至于 DbCommand/Connection,不,我从未处理过它们,但这只是因为很容易重新设计它以使用池而不是处理。我不介意我是否经常创建/处置 ObjectContexts(假设成本很便宜,我认为是这样),但这似乎会破坏很多缓存机会。
标签: c# .net multithreading entity-framework