How to change LINQ O/R-M table name/source during runtime?(如何在运行时更改 LINQ O/R-M 表名/源?)
问题描述
我有一个数据库和一个由 O/R-Mapper 创建的实体集,所有这些都与 LINQ 一起使用.
I've got a database, and an entityset created by the O/R-Mapper, using all this with LINQ.
在 O/R-Mapper 中,我需要为每个表输入一个表名(源),用于 LINQ 生成的 SQL.在 .dbml 文件中,它看起来像这样:
In the O/R-Mapper I need to enter a table name (source) for every table, which is being used for the SQL generated by LINQ. In the .dbml file it looks like this:
<Table Name="dbo.Customers" Member="Customers">
现在我想在运行时更改这个表名,所以 SQL 将针对其他一些表(例如,customers2008 而不是 customer)运行.
Now I'd like to change this table name during runtime, so the SQL will be run against some other table (customers2008 instead of customer, for example).
有没有办法在运行时更改表名(源名)?
Is there any way to change the table name (source name) during runtime?
[更新] 经过一些令我沮丧的测试后,我不得不发现 XmlMappingSource 确实将未保留在数据库中的计算属性呈现为不可访问(是的,即使由 SqlMetal 创建的映射也忽略了所有未保留的内容).>
[Update] After some testing to my dismay I had to discover that XmlMappingSource does render computed properties which are not persisted in the database unaccessable (yes, even the mapping created by SqlMetal does ignore everything which is not persisted).
推荐答案
有点……你必须做这样的事情:
Kind of ... You'd have to do something like this:
- 在设计器中创建实体.
- 使用 SqlMetal 从设计器生成的 .dbml 文件生成 xml 映射文件.
- 更新 xml 文件中的表名.
- 然后在您的代码中,使用接受使用 xml 映射文件创建的 XmlMappingSource 的 DataContext 构造函数重载.
这是一篇博客文章,一步一步解释了这个过程:http://weblogs.asp.net/guybarrette/archive/2008/07/23/linq-to-sql-dynamic-mapping.aspx
Here's a blog post that explains this process step by step: http://weblogs.asp.net/guybarrette/archive/2008/07/23/linq-to-sql-dynamic-mapping.aspx
我对 ERP 数据库使用了类似的过程,该数据库的表名类似于 ttccom001xxx,其中 xxx 是安装 ID(我知道这是一个可怕的架构,但我对此无能为力).我们有多个安装,因此我为每个安装复制一次初始 xml 映射,然后将 xxx 替换为安装 ID.我编写了一个使用 Regex 处理替换的小型控制台应用程序,并将其添加到我的构建过程中.
I'm using a similar process with an ERP database that has table names like ttccom001xxx where xxx is the installation ID (I know it's a horrible schema, but there's nothing I can do about it). We have multiple installations, so I copy the initial xml mapping once for each installation and then replace xxx with the installation ID. I wrote a small console app that uses Regex to take care the replacements and added it as part of my build process.
这篇关于如何在运行时更改 LINQ O/R-M 表名/源?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在运行时更改 LINQ O/R-M 表名/源?
基础教程推荐
- Page.OnAppearing 中的 Xamarin.Forms Page.DisplayAlert 2022-01-01
- C# - 将浮点数转换为整数...并根据余数更改整数 2022-01-01
- 如何使用OpenXML SDK将Excel转换为CSV? 2022-01-01
- C# - 如何列出发布到 ASPX 页面的变量名称和值 2022-01-01
- 覆盖 Json.Net 中的默认原始类型处理 2022-01-01
- 使用 SED 在 XML 标签之间提取值 2022-01-01
- 从 VB6 迁移到 .NET/.NET Core 的最佳策略或工具 2022-01-01
- 当键值未知时反序列化 JSON 2022-01-01
- 我什么时候应该使用 GC.SuppressFinalize()? 2022-01-01
- 创建属性设置器委托 2022-01-01