2016-06-16 7 views
1

データベースに同じ列を含む2つのテーブルがあります。あるテーブル(TB1という名前)にレコードがあり、それをEFを使用して別のテーブル(TB2という名前)に「転送」したいと思います。私の考えは、この方向にあったので、私は、EFに精通していないよEFを使用してあるテーブルから別のテーブルにデータを転送する方法は?

:このロジックを続行するには、

var testEntity = new TestEntities(); 
var data1 = testEntity.TB1.Find(id); 
var data2 = new TB2(); 

// Pass all the properties from one object (data1) to another (data2) 

testEntity.TB2.Add(data2); 
testEntity.TB1.Remove(data1); 
testEntity.SaveChanges(); 

しかし、私は手動で、あるオブジェクトから別のオブジェクトのすべてのプロパティを渡す必要があります。そしてそれは多くの特性(約50)を含んでいます。

彼らは同じ性質を持っているので、私は本当にこのプロセスを実行する簡単な方法がなければならないと思っています。

このデータを簡単に転送する方法はありますか?

答えて

2

Entity Frameworkには、オブジェクトプロパティのコピーを処理する関数があります。 https://msdn.microsoft.com/en-us/data/jj592677.aspxを参照してください。

これを行う最も簡単な方法は、CurrentValues.SetValues()を使用することです。

var testEntity = new TestEntities(); 
var data1 = testEntity.TB1.Find(id); 
var data2 = new TB2(); 

data2.CurrentValues.SetValues(data1); 

testEntity.TB2.Add(data2); 
testEntity.TB1.Remove(data1); 
testEntity.SaveChanges(); 

この技術n層アプリケーションにサービスコールまたはクライアントから得られた値を用いてエンティティを更新するときに時々使用されます。使用されるオブジェクトは、その名前がエンティティの名前と一致するプロパティを持つ限り、エンティティと同じタイプである必要はありません。

+0

優秀!わずかな調整だけで、完全に機能しました。ありがとう! –

+0

私は同じことをしようとしていますが、上記の投稿に続いて、私のdata2に相当するCurrentValues.SetValuesオプションはありません。 – DarrenNavitas

1

SQLを使用して、SQL Serverのテーブル間でデータを転送することもできます。これは非常に速い方法ですが、きれいなコーダーではあまりクリーンではありません。

インターフェイスを作成できます。 IExecuteSQLQueryメソッドExcute(DbContext)とクラスTransferDataFromT1ToT2:IEexcuteSQLQueryを使用すると、SQLテキストを処理する一般的な方法が得られます。

dbContext.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, 
"INSERT INTO T2 (CustomerName, Country) 
SELECT SupplierName, Country FROM T1 
WHERE Country ='Germany';"); 
+1

私はClaiesのソリューションを選んだが、それは本当に知って良いことだ。アップアップされました! –

関連する問題