私は2つのSQL Expressデータベースを持っています。最初のデータベースにはデータがたくさんありますが、新しいアプリケーションを構築して同様のテーブル構造(いくつかのカラムを追加し、いくつかを削除し、いくつかのテーブルをマージしました。クライアントは同じで、新しいアプリケーションで古いデータを使用したいと考えています。Entity Framework C# - 類似の構造を持つあるデータベースから別のデータベースへデータを移動する
私は今、何をしようとしているのは、古いDBからデータを(テーブルごとに)移動し、(手動で)古いフォーマットから新しいフォーマットにエンティティを変換し、 DB。
私はEntity Frameworkを使用しています。サーバーはASP.NET Web Apiです。 2つの別々のDbContextを作成しました.1つは古いDB用、もう1つは新しいもの用です。 私は古いDBから自分のデータを取得して変換することができますが、私は自分の問題にぶつかります。私は古いDBに存在する関係を維持できるように、同じままにするためにIdentity列が必要です。エンティティを保存しようとすると、EFはIdentity_InsertがオフのときにID列に値を挿入できないことを伝えます。
これは私の実際のエラーメッセージです:IDENTITY_INSERTがOFFに設定されている場合
は「AccessoryProfiles」テーブルにID列の明示的な値を挿入することはできません。
ここでデータを移行しようとする私のコントローラのメソッドです:DataService
は新しいものを扱うながら
public IHttpActionResult Get()
{
try
{
var manager = new MigrationManager<AccessoryProfile>();
var entities = manager.GetAll();
foreach (var profile in entities)
{
var newEntity = new Entities.Server.Accessories.AccessoryProfile
{
Id = profile.AccessoryProfileId,
Name = profile.Name,
CreatedDate = profile.CreatedDate,
LastModifiedDate = profile.LastModifiedDate,
DeletedDate = profile.DeletedDate
};
DataService.AccessoryProfile.Add(newEntity);
}
DataService.AccessoryProfile.Commit();
return Ok();
}
catch (Exception exc)
{
Logger.Error(exc);
return null;
}
}
MigrationManager<T>
は古いDBを処理します。 Idで[DatabaseGenerated(DatabaseGeneratedOption.None)]を設定しようとしましたが、運がありません。
DbContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[AccessoryProfiles] ON");
を...しかし、私はまだID列に値を挿入することはできません:私は)(私のコミット前にこれを実行してみました。
どのようにEntity Frameworkでこれを行うことになっていますか? EFを使用するよりも良い方法が分かっていれば、私はすべて耳にします。 ありがとう!
SQL Serverのデータを '.csv'にエクスポートし、' .xls'に変換して新しいdbにインポートすることができます。 '.xls'ファイルのスキーマを変更することは問題ではありません。 –
SQLクエリでこれを行うことはできませんか?データを転送するこのアプローチは深刻な頭痛になる可能性があります。あなたは、このような他の多くの問題に直面する可能性があります。これらの問題はすべて、SQLで扱いやすくなります。私はあなたがselect ...などから挿入するようなクエリを書くことをお勧めします。また、プライマリキーと外部キーの間の参照整合性について心配することを忘れないでください。幸運。 –
DbContext.Database.ExecuteSqlCommandを実行していることを確認してください( "SET IDENTITY_INSERT [dbo]。[AccessoryProfiles] ON");送信側のデータベースコンテキストではなく、受信側のデータベースコンテキストに対して –