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