我想遍历一系列传入记录,检查我的数据库以查看它们是否已存在,并根据需要添加或更新它们。我收效甚微。
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调用直到循环结束,因为可能有数百条记录要调用,而且我不想进行数百次db调用。
出现错误如下:
会员' CurrentValues'不能为类型的实体调用 ' MTAccount'因为实体在上下文中不存在。加上 上下文的实体调用Add或Attach方法 DbSet。
答案 0 :(得分:0)
好的,我把它解决了,
在我原来的代码中:
var entry = model.Entry(processedUser);
model.Entry(processedUser).CurrentValues.SetValues(processedUser);
试图更新processedUser的值 我应该说的是:
model.Entry(clientInDb).CurrentValues.SetValues(processedUser);
将更改应用于数据库
中的原始客户端感谢您的评论。