用 C# 中的另一个实体更新实体 Entity Framework

Updating entity with another entity in C# Entity Framework

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

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

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

我如何为 Geekguy123 更新数据库 1,以便新的 FirstName 是 Frederick? ID 不同,但用户是唯一的。

明确地说,实体上有几十个属性,我不想手动更新。也许 SQL 会更容易?

只需在数据库 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。

如果 table 名称确实是 Database1,则相应地替换 Table1Table2

UPDATE t1
  SET t1.FirstName = t2.FirstName
  FROM Database1.dbo.Table1 AS t1
  INNER JOIN Database2.dbo.Table2 AS t2
  ON t1.User = t2.User

直通是这样的:

using (var context = new YourDataContext()) 
{ 
    context.Database.ExecuteSqlCommand(sqlString);
}

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