0

我在 SQL Server 的上下文和 MySql 的上下文中有相同的实体,我需要将相同的实体从 SQL Server 添加到 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;

在这里你只是让 test2 引用 test1 但你不改变它,为你的实体实现方法 getValues 和 setValues 并这样做

test2.setValues(test1.getValues());

让它像这样

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

test2.setValues(test1);

关键是 contextMySql.MyEntitys 持有对 test2 指向的同一对象的引用。它指向同一个对象,但它们不相同,它们是相同地址的两个副本。如果您将新地址放入其中,则不会影响其他地址,但如果您将某些内容放入其中,则它将同时在其中。

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 回答