【问题标题】:How To insert records of one database to other database in LINQ如何在LINQ中将一个数据库的记录插入到另一个数据库中
【发布时间】:2015-02-10 09:22:50
【问题描述】:

我有 2 个带表格的数据库。

我想在 LINQ 中将记录从第一个数据库插入到第二个数据库表。我创建了 2 个带有 2 个数据上下文的 dbml 文件,但我无法对记录的插入进行编码。

我有记录列表:

using(_TimeClockDataContext)
{
    var Query = (from EditTime in _TimeClockDataContext.tblEditTimes
                 orderby EditTime.ScanDate ascending
                 select new EditTimeBO
                 {
                     EditTimeID = EditTime.EditTimeID,
                     UserID = Convert.ToInt64(EditTime.UserID),
                     ScanCardId = Convert.ToInt64(EditTime.ScanCardId),
                 }).ToList();
    return Query;
}

现在我想在_Premire2DataContext 的新表中插入记录。

【问题讨论】:

  • 嗨,欢迎来到 Stack Overflow。这不是提问的好方法,请先阅读规则。您能否提供一个代码示例,并解释该代码中的哪些内容不起作用,这样的错误消息?谢谢。
  • 我有记录列表:
  • 如果是linq2sql,调用_TimeClockDataContext.SubmitChanges()
  • 不,我想要从上面的编码中得到的列表记录。想要将此列表插入到具有表 x 的新数据库中。如何为它编写查询。

标签: c# linq


【解决方案1】:

如果您想使用 Linq 将记录从一个数据库“复制”到另一个数据库,那么您需要两个数据库上下文,一个用于您正在读取的数据库,一个用于您正在读取的数据库。

EditTime[] sourceRows;
using (var sourceContext = CreateSourceContext())
{
    sourceRows = ReadRows(sourceContext);
}

using (var destinationContext = CreateDestinationContext())
{
    WriteRows(destinationContext, sourceRows);
}

您现在只需使用标准 LINQ to SQL 代码填写 ReadRowsWriteRows 的实现。写行的代码应该有点像这样。

void WriteRows(TimeClockDataContext context, EditTime[] rows)
{
    foreach (var row in rows)
    {
        destinationContext.tblEditTimes.Add(row);
    }
    destinationContext.SubmitChanges();
}

请注意,只要架构相同,您就可以使用相同的上下文,因此可以使用相同的对象 - 所以在读取记录时,我们理想地希望返回正确的数组类型,因此读取看起来有点像这样

EditTime[] ReadRows(TimeClockDataContext context)
{
    return (
        from EditTime in _TimeClockDataContext.tblEditTimes
        orderby EditTime.ScanDate ascending
        select EditTime
     ).ToArray();
}

您可以使用数组或列表 - 这并不重要。我使用数组主要是因为语法更短。请注意,我们返回原始的 EditTime 对象而不是创建新对象,因为这意味着我们可以将这些对象直接添加到第二个数据上下文中。

我还没有编译任何这段代码,所以它可能包含一些拼写错误。如果我犯了一些明显的错误,也很抱歉 - 自从我上次使用 LINQ to SQL 已经有一段时间了。

如果您有外键或第二个数据库有不同的架构,那么事情会变得更加复杂,但基本过程保持不变 - 从一个上下文读取(使用标准 LINQ to SQL)并将结果存储在某处,然后添加在第二个上下文中行(使用标准 LINQ to SQL)。

另请注意,这不一定会特别快。如果性能是一个问题,那么您应该考虑在 WriteRows 方法中使用批量插入,或者甚至可能使用链接服务器在 SQL 中完成整个操作。

【讨论】:

  • 谢谢贾斯汀...会试试的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2023-04-03
  • 2015-03-31
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多