我有2个带表格的数据库。
我想将第一个数据库中的记录插入LINQ中的第二个数据库表。我创建了2个带有2个datacontexts的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
中的新表中插入记录。
答案 0 :(得分:0)
如果您想使用Linq将记录从一个数据库“复制”到另一个数据库,那么您需要两个数据库上下文,一个用于您正在读取的数据库,另一个用于您正在读取的数据库。
EditTime[] sourceRows;
using (var sourceContext = CreateSourceContext())
{
sourceRows = ReadRows(sourceContext);
}
using (var destinationContext = CreateDestinationContext())
{
WriteRows(destinationContext, sourceRows);
}
您现在只需要使用标准的LINQ to SQL代码填写ReadRows
和WriteRows
的实现。写行的代码应该看起来像这样。
void WriteRows(TimeClockDataContext context, EditTime[] rows)
{
foreach (var row in rows)
{
destinationContext.tblEditTimes.Add(row);
}
destinationContext.SubmitChanges();
}
请注意,只要架构相同,您就可以使用相同的上下文,因此使用相同的对象 - 因此在读取记录时,我们理想地希望返回正确的数组类型,因此读取看起来有点像这样< / p>
EditTime[] ReadRows(TimeClockDataContext context)
{
return (
from EditTime in _TimeClockDataContext.tblEditTimes
orderby EditTime.ScanDate ascending
select EditTime
).ToArray();
}
您可以使用数组或列表 - 这并不重要。我使用的数组主要是因为语法较短。请注意,我们返回原始EditTime
对象而不是创建新对象,因为这意味着我们可以将这些对象直接添加到第二个数据上下文中。
我还没有编译任何此代码,因此它可能包含一些拼写错误。如果我犯了一些明显的错误,也会道歉 - 自从我上次使用LINQ to SQL以来已经有一段时间了。
如果您有外键或第二个数据库有不同的架构,那么事情变得更复杂,但基本过程保持不变 - 从一个上下文(使用标准LINQ到SQL)读取并将结果存储在某处,然后添加行第二个上下文(使用标准LINQ to SQL)。
另请注意,这不一定特别快。如果性能是一个问题,那么您应该考虑在WriteRows
方法中使用批量插入,或者甚至可能使用链接服务器在SQL中执行整个操作。