用 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,则相应地替换 Table1
、Table2
。
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);
}
事实证明,实际上有几百个属性。我最终删除并重新添加了具有新值的实体。
我有一堆实体需要更新以匹配不同数据库中相同 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,则相应地替换 Table1
、Table2
。
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); }
事实证明,实际上有几百个属性。我最终删除并重新添加了具有新值的实体。