尝试将实体从 SQL Server 添加或更新到 MySql
Posted
技术标签:
【中文标题】尝试将实体从 SQL Server 添加或更新到 MySql【英文标题】:Trying to add or update an entity from SQL Server to MySql 【发布时间】:2012-11-28 03:23:54 【问题描述】:我在 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();
这不起作用。
我尝试了很多东西并从其他人那里获得了同样问题的示例代码,但没有任何效果。任何想法?
【问题讨论】:
【参考方案1】: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:实体的复数是实体。
【讨论】:
我实现了一个方法 Clone(),它可以工作,但是如果我有例如 test1.Id = 12435,由于某种原因,当我保存更改时,它会正确保存所有字段,但不会保存 ID。它为 Id 字段提供了一个高数字(如 100000000、1000000001、...) 您的意思是它正在将 id 更新为高值还是正在插入新记录? 展示您如何实现 Clone 以及如何使用它 test2 = test1.Clone();以及 Clone() 的代码: public MyEntity Clone() MyEntity item = new MyEntity (); item.Name = this.Name; item.Id = this.Id;归还物品; 还是同样的问题,你需要修改对象test2而不是替换它。以上是关于尝试将实体从 SQL Server 添加或更新到 MySql的主要内容,如果未能解决你的问题,请参考以下文章
将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0
将数据库移动到新服务器后,无法在 Visual Studio 2010 的实体框架设计器中看到 SQL Server 2008 表