.net - 如何在运行时更改 LINQ O/R-M 表名/源?

标签 .net linq linq-to-sql

我有一个数据库和一个由 O/R-Mapper 创建的实体集,所有这些都与 LINQ 一起使用。

在 O/R-Mapper 中,我需要为每个表输入一个表名(源),用于 LINQ 生成的 SQL。在 .dbml 文件中,它看起来像这样:

<Table Name="dbo.Customers" Member="Customers">

现在我想在运行时更改这个表名,所以 SQL 将针对其他一些表(例如,customers2008 而不是 customer)运行。

有没有办法在运行时更改表名(源名称)?

[更新] 经过一些令我沮丧的测试后,我不得不发现 XmlMappingSource 确实将未保留在数据库中的计算属性呈现为不可访问(是的,即使由 SqlMetal 创建的映射也忽略了所有未保留的内容)。

最佳答案

有点......你必须做这样的事情:

  • 在设计器中创建实体。
  • 使用 SqlMetal 从设计器生成的 .dbml 文件生成 xml 映射文件。
  • 更新 xml 文件中的表名。
  • 然后在您的代码中,使用接受使用 xml 映射文件创建的 XmlMappingSource 的 DataContext 构造函数重载。

  • 这是一篇博客文章,逐步解释了此过程:
    http://weblogs.asp.net/guybarrette/archive/2008/07/23/linq-to-sql-dynamic-mapping.aspx

    我正在对一个 ERP 数据库使用类似的过程,该数据库具有像 ttccom001xxx 这样的表名,其中 xxx 是安装 ID(我知道这是一个可怕的架构,但我对此无能为力)。我们有多个安装,所以我为每个安装复制一次初始 xml 映射,然后将 xxx 替换为安装 ID。我编写了一个使用 Regex 处理替换的小型控制台应用程序,并将其添加为我的构建过程的一部分。

    关于.net - 如何在运行时更改 LINQ O/R-M 表名/源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/582221/

    相关文章:

    .net - 在 Powershell 2 中声明第三方程序集类型的通用列表

    c# - 最好的 c# 异常处理开源工具

    linq - EF1.0 中的预加载

    linq-to-sql - F# LINQ 添加新行到 SQL Server

    c# - 如何在不先加载到 RAM 的情况下将文件加载到 blob 中?

    c# - 使用自定义游标 WinForms

    c# - 如何在 Linq to SQL 中合并日期时间偏移量?

    c# - 将 SQL 查询转换为 LINQ 查询

    c# - 如何将带有 Unions 的 SQL 查询转换为 LINQ?

    .net - Entity Framework - 混合模型优先和数据库优先方法?