使用Entity Framework处理大量表格

3

我们的数据库中有大约500张表,希望在EF模型中使用。其中,只需从这些表中选出50张或更少的表来开始尝试,因为我们已经连续多年在普通的ADO.net中工作了。

问题是,我们的SQL服务器包含许多其他表,这些表存在于我们的数据库中,并且这些表是经过多年创建和许多动态生成的。信不信由你:

select count(*) from INFORMATION_SCHEMA.TABLES
73261

那是很多表格。我发现几乎每个我尝试设计、构建或模板化EF模型或实体的工具都会挂起或不返回表格列表。即使在VS2012中,SQL Server Object Explorer也无法列出表格,而是显示带有小“x”图标的表格文件夹。因此,我甚至无法选择一部分表格。
我使用EF有哪些选项?是否有一个模板,我可以明确定义要使用实体的表格?即使有50个表格,我也不想在空的EDMX中手动编写每个表格。

1
你可以创建仅用于设计目的的子集表的较小数据库吗?但另一方面,现在是重新考虑数据“模型”的时候了吗?这么多表真的很令人震惊。应该有可能在规范化的模型中合并大量表格(其中表格名称升级为列)。 - Gert Arnold
我很好奇:SQL Server能够承载如此大量的模式对象吗?你有没有注意到问题? - usr
@usr:我相信SQL Server支持多达20亿个表。我们没有注意到任何减速或其他问题。另一个好处是,这些表中的大多数对应于特定产品,并且每个表的模式是动态生成的。当产品完成时,整个表可以被删除/归档。此外,一个产品表中的锁定不会影响任何其他表。这种设计已经为我们服务了12年。 - powlette
2个回答

2
使用数据库/代码优先方法,并且完全避免将Visual Studio连接到数据库(即不要创建edmx,也不要使用服务器资源管理器连接)将使您轻松实现此目标。它不会提供任何模型优先的优势,但我认为您的项目无论如何都可以更好地采用数据库/代码优先方法,因为:
  1. 您已经有一个现有的模型,并且不希望将更改从EDMX推送到数据库
  2. 您希望在数据库的子集上实施此操作
这个链接总结得很好(Code-first vs Model/Database-first),但需要注意的是,在您的情况下,数据库/代码优先方法不会让您将更改从代码推送到数据库,所以代码优先下的最后两个项目应该不太适用,而您的方法是数据库/代码优先混合。
考虑到您有70k张表格,我认为任何GUI都会比较棘手。当我说数据库/代码优先时,我试图传达的是您不使用代码来创建/定义和更新数据库。可能有人能更简洁/准确地回答这个问题?

有没有一个T4模板可以让我列出我关心的表,并为我生成实体类?我找到的那些模板都非常庞大和复杂,而且使用SMO,所以在脚本化一个简单的表之前,它们基本上会挂起很多分钟。 - powlette
我得留给其他人来评论,因为我从未尝试过,并且从未处理过在具有如此多表的数据库上使用ORM /建模工具。 (虽然我遇到过一些具有类似数量的自动生成表的数据库)。我想补充说,手动创建50个以上对象的实体POCO虽然让人感到无聊,但实际上并不需要太多工作量。如果您最终的目标是要做成千上万个对象,并希望DB更改自动传播,则绝对需要解决一些流程(正如您所请求的)来脚本化对象生成。 - Matthew

0

我知道这是一个老问题。但对于那些通过谷歌搜索到达这里的人来说,我找到的唯一一个可以处理数千个表格的工具是The Sharp Factory。

它是一个ORM。非常简单易用。因此,如果您正在寻找一个可以处理大量表格且不需要编写“POCOS”、“Mappings”或SQL的ORM工具,则这是您需要的工具。

您可以在这里找到它:The Sharp Factory


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接