EFを使用してあるデータベースから別のデータベースにデータをコピーする必要があります。例えば。私は次の表関係を持っています:フォーム - > FormVersions - > FormLayouts ...我々は両方のデータベースで異なるフォームを持っており、それらを1つのDBに集めたいと考えています。基本的に私はフォームオブジェクトを再帰的に1つのDBからロードし、すべての参照を含む別のDBに保存します。また、2番目のデータベースに同じIDのオブジェクトが存在する場合は、オブジェクトと関連オブジェクトのIDを変更する必要があります。EFを使用して2つのデータベース間でレコードをコピー
Form form = null;
using (var context = new FormEntities())
{
form = (from f in context.Forms
join fv in context.FormVersions on f.ID equals fv.FormID
where f.ID == 56
select f).First();
}
var context1 = new FormEntities("name=FormEntities1");
context1.AddObject("Forms", form);
context1.SaveChanges();
私はエラー受けています:今まで私は、次のコードしている
「のEntityKeyプロパティは専用プロパティの現在の値がnullのときに設定することができます」と
実装にお役立てください。
解決策を試しました。それは正常に動作しますが、Formオブジェクトに対してのみ有効です。フォームを切り離すと、関連するオブジェクトがすべて失われます。したがって、FormがFormVersionsを10個持っている場合、Formは0 FormVersionsを持ちます。私はルートオブジェクトだけでなく、すべての階層をコピーすることを達成したいと思います。 – zosim
はい、まさに何が起きているのか、Formとそのすべてのリレーションの完全なコピーを作成すること以外は解決策がありません(最も簡単な解決策はFormを直列化および非直列化して完全なクローンを得ることですが、Formは直列化可能でなければなりません)。ありがとう。 –
シリアライゼーションは私の解決策です。しかし、生成EFモデルのデフォルトテンプレートには、エンティティコレクションの[XmlIgnoreAttribute()]属性があります。それは、関連オブジェクトがシリアル化されていないことを意味します。どのようにmodifiyngテンプレートなしで関連オブジェクトをシリアル化するオプションがありますか? – zosim