0

SQL ServerのコンテキストとMySqlのコンテキストに同じエンティティがあり、SQLサーバーからMySqlに同じエンティティを追加する必要がありますが、できません。

私はこのコードを持っています:

    var test1 = contextSQL.MyEntitys.Where(m => m.Id == 1000).FirstOrDefault();
    var test2 = contextMySql.MyEntitys.Where(m => m.Id == 1000).FirstOrDefault();

    if(test2 != null)
       test2 = test1;
    else
       contextMySql.MyEntitys.Add(test1);

    contextMySql.SaveChanges();

そして、これは機能しません。

私は多くのことを試し、明らかに同じ問題を抱えている他の人のサンプルコードを試しましたが、何も機能しません。何か案が?

4

1 に答える 1

0
test2 = test1;

ここでは、test1を参照するようにtest2を作成しますが、それを変更せず、エンティティのメソッドgetValuesとsetValuesを実装し、次のようにします。

test2.setValues(test1.getValues());

このようにしてください

public void setValues(MyEntity entity) {
this.Name = entity.getName();
}

test2.setValues(test1);

重要なのは、contextMySql.MyEntitysがtest2が指すのと同じオブジェクトへの参照を保持しているということです。同じオブジェクトのポイントですが、同じではなく、同じアドレスの2つのコピーです。新しいアドレスを1つに入れると、他には影響しませんが、1つに何かを入れると、両方の中になります。

Object o1 = new Object();
Object o2 = o1;

o1.setId(1);
//both have id 1

o2.setId(2);
//both have id 2

o2 = new Object();
o2.setId(3);
//o1 still have id 2 but o2 has id 3

あなたの場合、o1はcontextMySql.MyEntitysの内部にあり、test2はo2です。

PS:エンティティからの複数形はエンティティです。

于 2012-12-10T17:15:30.203 に答える