我有很奇怪的問題
我的代碼如果我登錄并使用它就可以正常作業,然后它會保存首選項等。
但是當我登錄時問題就開始了,做一些選擇,然后注銷并以另一個用戶的身份登錄,然后在保存時它還會記住我為另一個用戶所做的選擇,最后一個并保存。
如何防止這種情況?
private ApplicationDbContext db = new ApplicationDbContext();
...
public IHttpActionResult Add(UserPreferencesDto model)
{
model.UserId = User.Identity.GetUserId();
var userPreferences = db.UserPreferences.Where(u =>
u.UserId == model.UserId &&
u.Key == model.Key.Trim())
.FirstOrDefault();
List<int> StatesCollection = new List<int>();
var param = model.Value.Trim();
string[] paramSplitted = param.Split(',');
if (userPreferences != null)
{
if (string.IsNullOrEmpty(userPreferences.Value) == false)
{
var trimmedPreferenceValue = userPreferences.Value.Trim('[', ']');
if (string.IsNullOrEmpty(trimmedPreferenceValue) == false)
{
StatesCollection = trimmedPreferenceValue.Split(',')
.Select(s => Convert.ToInt32(s)).ToList<int>();
}
if (model.IsStateSelected == false && paramSplitted.Count() == 1
&& StatesCollection.Contains(int.Parse(param.Trim())))
{
StatesCollection = StatesCollection.Where(sa => sa != int.Parse(param)).ToList<int>();
userPreferences.Value = StatesCollection.Count > 0 ? JsonConvert.SerializeObject(StatesCollection) : "";
}
else if (model.IsStateSelected && paramSplitted.Count() == 1
&& !StatesCollection.Contains(int.Parse(param)))
{
StatesCollection.Add(int.Parse(param));
userPreferences.Value = JsonConvert.SerializeObject(StatesCollection);
}
}
else
{
StatesCollection.Add(int.Parse(param));
userPreferences.Value = JsonConvert.SerializeObject(StatesCollection);
}
}
else
{
if (model.IsStateSelected == true)
{
//string[] splittedStates = model.Value.Split(',');
int[] secRolesIds = Array.ConvertAll(paramSplitted, int.Parse);
model.Value = JsonConvert.SerializeObject(secRolesIds);
db.UserPreferences.Add(Mapper.Map<UserPreferences>(model));
}
}
db.SaveChanges();
return Ok();
}
即使存在偏好,它也會進入最后一個 else。
uj5u.com熱心網友回復:
物體框架中的 SaveChanges() 保存所有跟蹤的更改。
您必須明確放棄更改或使用未跟蹤的物體,僅在您希望保存時添加它們。
https://docs.microsoft.com/en-us/ef/core/querying/tracking
uj5u.com熱心網友回復:
我認為你應該在給它一個值之前讓 userPreferences 變數為 null,這樣你就可以防止它在上次執行時有一個值,因為你會確保它因為你強迫它變成 null 。通過這樣做,如果當您嘗試為其分配值時資料庫中沒有結果,它肯定會保持為空,因此它將使用 if (userPreferences != null) 進入 if (userPreferences != null) 并且不要轉到別的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313330.html
下一篇:將主鍵修改為外鍵時出錯
