同じスキーマの2つのデータベースがある場合、2つのデータベース間でレコードを簡単に転送できますか?途中でいくつかの追加操作を実行する必要があるため、LINQをSQLに使用しています。転送しているレコードを表すオブジェクトを使用すると、はるかに簡単になります。これは小規模のヘルパーアプリケーションなので、SSISはおそらく過度のスキルであり、SQLBulkCopyでは途中のオブジェクトを簡単に調べることができません。私がやりたいのは何LINQ to SQLを使用してデータベース間でコピーする
はこれです:
public static void TransferCustomer
(DBDataContext DCSource,
DBDataContext DCDest,
int CustomerID)
{
Customer customer;
using (DCSource = new DBDataContext(SourceConnStr))
{
customer = DCSource.Customers
.Where(c => c.CustomerID == CustomerID)
.Single();
}
using (DCDest = new DBDataContext(DestConnStr))
{
DCDest.Customers.InsertOnSubmit(customer);
DCDest.SubmitChanges();
}
}
しかし、メッセージと例外をスローする明白な理由のために:
試みは、ANを添付または追加することが行われています新しいエンティティではなく、別のDataContextからロードされている可能性があります。これはサポートされていません。
public static Customer Clone(this Customer customer) { return new Customer() { Name = customer.Name, Email = customer.Email etc... }; }
をして、クローン化された項目を挿入:
私はこのようなオブジェクトの簡易コピーを行うことによって、このラウンドを取得することができます。問題のフィールドだけをコピーし、テーブルの関係を表す参照はコピーしないとうまくいきます。それは少し長めですが、私がやっている方法では、クローンメソッドのすべてのフィールドを手動で割り当てる必要があります。誰もがこれを簡単にする方法を提案できますか?私が知りたいのですが二つのものがあります:
- SQLにLINQは、簡単な方法でこれを行うことができ、
- が挿入されます浅いコピーを作成するためにリフレクションを使用しての良い方法はありますか?
多くの感謝!
を試してみてください。私は、各バッチの複数のテーブルに50行以上の行を転送する予定はないので、SSISはおそらく過剰なものだと思います。オブジェクトごとにクローンメソッドを使用して私の現在のソリューションは本当にうまく動作しますが、それは控えめな感じです。私はより多くのテーブルを追加する必要があるので、より多くのクローンメソッドを作成する前に、より良い方法を見つけたいと思っていました。 –