0
我想遍历一系列传入记录,检查我的数据库以查看它们是否已经存在,并根据需要添加或更新它们。我没有成功。实体框架 - 更新或添加
var listOfClientAccounts = model.MTAccounts.ToList(); // single DB query
// for each of the users MTManager
foreach (var user in users)
{
var clientInDb = listOfClientAccounts
.SingleOrDefault(c => c.Login == user.Login); // runs in memory
var processedUser = ProcessUserRecord(user);
//Check if the Account Login is already in the database
if (clientInDb != null)
{
processedUser.MTAccountId = clientInDb.MTAccountId;
var entry = model.Entry(processedUser);
model.Entry(processedUser).CurrentValues.SetValues(processedUser);
entry.State = EntityState.Modified;
Console.WriteLine(x + " : UPDATE : " + processedUser.Login + "(" + clientInDb.MTAccountId + ")");
}
else
{
// Client does not exist add now
model.MTAccounts.Add(processedUser);
Console.WriteLine(x + " : ADD :" + processedUser.Login);
}
}
model.SaveChanges();
public MTAccount ProcessUserRecord(UserRecord user)
{
MTAccount DALUser = new MTAccount
{
BrokerServerId = 1,
Login = user.Login,
Group = user.Group
};
return DALUser;
}
关键的东西是,我想保持的SaveChanges调用直到循环结束,因为可能有数以百计的记录打电话,我不想让上百分贝的呼叫。
有误差如下:
会员“CurrentValues”不能被称为类型 “MTAccount”的实体,因为实体没有在上下文中。要向上下文添加 实体,请调用DbSet的Add或Attach方法 。
和你的代码有什么问题? –
由于您已经构建了这个结构,调用SaveChanges的位置并不重要,您仍然可以拨打数百个电话。您需要批量插入/更新,这在EF中本地不可用,并且需要扩展库 –
您的模型是什么?当然,你只需要模型,并添加一个新的实体或在调用'SaveChanges()'之前编辑匹配的实体 - 你在做什么?有什么问题? – RemarkLima