あるデータベースから別のデータベースにデータを転送する必要があるため、古いデータベースのテーブルを読み込み、後でエンティティを作成して保存するプログラムを作成しようとしました新しいデータベース、それは非常に良い仕事を始めに、私は1つのテーブルのみを読んで、新しいものに転送しようとした今、私は次のエラーが表示されます。。。プロパティ 'ID'はINSERTのオブジェクトキーの一部です
"The property 'Id' is part of the object's key information and cannot be modified.
私はそのエラーを取り除くいけないん。私が最初の実装(魅力のように働いた)に戻ろうとしても、テーブルの定義があります:
そして、ここでコード:
class MappingUtility
{
public static IEnumerable<Nation> MapNation(DataTable table, IModelFactoryService service)
{
IEnumerable<DataRow> rows = table.AsEnumerable();
Nation nat = service.Create<Nation>();
foreach(var nation in rows)
{
nat.Id = (System.Guid)nation.ItemArray[0];
nat.HVCode = (string)nation.ItemArray[1];
nat.Kurzbezeichung = (string)nation.ItemArray[2];
nat.KFZ = (string)nation.ItemArray[3];
nat.iso_a2 = (string)nation.ItemArray[4];
nat.iso_a3 = (string)nation.ItemArray[5];
nat.iso_n3 = (string)nation.ItemArray[6];
nat.Vollbezeichung = (string)nation.ItemArray[7];
nat.Updated = DateTime.Now;
nat.Created = DateTime.Now;
yield return nat;
}
}
}
using (var da = new SqlDataAdapter("SELECT * FROM NATION", "....."))
{
var table = new DataTable();
da.Fill(table);
using (var context = new DAtenbankContext())
{
int i = 0;
foreach (var nation in MappingUtility.MapNation(table, ef6))
{
Debug.WriteLine(i++);
if (context.Nation.Where(p => p.Id == nation.Id).FirstOrDefault() == null)
{
try
{
context.Entry(nation).State = EntityState.Added;
context.SaveChanges();
}
catch(DbEntityValidationException ex)
{
Debug.WriteLine("");
}
catch (DbUpdateException ex)
{
Debug.WriteLine("There where some duplicate columns in the old table.");
Debug.WriteLine(ex.StackTrace);
}
}
}
}
}
注:idが自動生成されていません。一度に1つの国だけを作成しようとすると、それを挿入できます。このforループでも、私は1つの国を挿入し、2番目の反復ではエラーが発生します。
をあなたは 'foreach'ループにnat''のインスタンス化を移動する必要があります。ループの各反復でそのプロパティを上書きして、同じインスタンスを何度も戻しています。 – Amy