在c#实体框架中用另一个实体更新实体

本文关键字:实体 另一个 更新 框架 | 更新日期: 2023-09-27 18:16:14

我有一堆需要更新的实体,以匹配不同数据库中同一类的实体。例如:

Database1 TableA:
Id| User       | FirstName| LastName
1 | Geekguy123 | Fred     | Smith
Database2 TableA:
Id| User       | FirstName| LastName
34| Geekguy123 | Frederick| Smith

如何为Geekguy123更新database1,使新的FirstName是Frederick?id不同,但User是唯一的。

要清楚,实体上有几十个属性,我不想手动更新。也许SQL会更简单?

在c#实体框架中用另一个实体更新实体

只需在数据库1中查询您想要的记录。获取它的FirstName属性,然后查询数据库2中的记录,然后用从数据库1中获得的记录更新FirstName字段。然后提交您的更改。

Db1Context c1 = new Db1Context();
var userToUpdateWith = c1.Users.Single(u => u.User == "Geekguy123")
Db2Context c2 = new Db2Context();
var userToUpdate = c2.Users.Single(u => u.User == "Geekguy123")

由于您需要设置许多属性,因此您可以执行以下操作:

string[] properties = new string[]{"FirstName","LastName"};
foreach(var property in properties){        
    object value = userToUpdateWith.GetType().GetProperty(property).GetValue(userToUpdateWith, null); 
    userToUpdate.GetProperty(property).SetValue(userToUpdate, value, null);       
c2.SaveChanges();

您可以使用的传递SQL。

如果表名真的 Database1,那么替换Table1, Table2

<>之前更新t1组t1。FirstName = t2。FirstName从Database1.dbo。表1 AS t1内部连接Database2.dbo。表2 AS t2在t1。用户= t2。用户之前

和传递将是这样的:

<>之前使用(var context = new YourDataContext()){context.Database.ExecuteSqlCommand(是);}

原来,实际上有几百个属性。我最终删除并重新添加了具有新值的实体。