【问题标题】:Linq to SQL Multiple DBMLs Share TypesLinq to SQL 多个 DBML 共享类型
【发布时间】:2012-04-30 19:37:14
【问题描述】:

我需要将数据从一个数据库传输到另一个数据库。目标数据库包含的数据量比源数据库少得多,每个表只是源表列的一个子集。我刚刚创建了目标 DBML,我得到了正确的编译错误,因为 L2S 数据类型(在目标 DBML 中)与源 DBML 中的 L2S 数据类型相同。

有没有办法在数据上下文之间共享这些类型?如果没有,有没有办法将源类型转换为目标类型,这样我就不必在保存到目标数据库之前创建映射器来将每个源类型映射到目标类型?

需要明确的是,在源 DBML 中,我只包含必要的列。这就是为什么源类型和目标类型完全相同,但它们属于它们自己的 DBML。

这个完全相同的表在两个 DBML 中:

这个问题很难正确表达。另一种问这个问题的方法是:“我可以从源表中获取数据,并将其保存到目标数据库,只使用源 DBML 中的一种类型吗?”

【问题讨论】:

  • 你能在不同的命名空间中创建 DBML 吗?然后你可以编译和使用它们就好了。如果之后您想以更自动的方式映射它们(而不是为每个实体手动映射),那么像 AutoMapper 这样的东西应该能够提供帮助。
  • 我可以,但是我仍然有尝试将源类型保存到目标数据库的问题。而且我认为这不会起作用,因为类型上有表属性。
  • 我能够解密这些字段

标签: c# sql-server linq-to-sql datacontext


【解决方案1】:

正如@David 建议的那样,在不同的命名空间中创建 DBML,然后使用 Automapper 或编写一些代码来生成映射(根据您的要求,这真的很容易)。

有没有办法在数据上下文之间共享这些类型?

没有。

如果没有,有没有办法将源类型转换为目标类型 所以我不必创建映射器来将每个源类型映射到 保存到目标数据库之前的目标类型?

您必须创建映射 - 但是,这非常容易(属性具有相同的名称、类型等)。我什至认为没有 Linq2Sql 或任何其他 ORM 会更容易。 恕我直言,您应该删除所有约束、FK 等,在 SQL 命令级别复制数据(自己生成此代码),然后重新创建所有约束。

【讨论】:

  • 同意,有一些 SQL 原生方法可以在不涉及 .NET 和 ORM 的情况下执行这样的 ETL 过程。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 2011-03-23
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多