问题描述
|
我有3个栏位:
urlName
,displayName
和active
。这是检查编辑记录。我在这里要做的是检查UrlName
在Db中是否唯一,但是同时,如果用户已经保存了Url但更改了displayName
和Active
,则记录应该更新。
有人告诉我如何解决。
public bool nothingExceptUrlNameExists(string urlName,string displayName,bool active)
{
return (from p in _db.SubMenus
where p.UrlName == urlName && (p.displayName != displayName || p.displayName == displayName) && (p.Active != active || p.Active == active)
select p).Any();
}
更新记录像
TryUpdateModel(existingMenu);
_menu.Add();
这就是我要实现的
我的其他2个值应添加到Query displayName和Active中。假设\“ Contact \” UrlName已经在数据库中。我正在从下拉列表加载值,返回UrlName = \“ About \”,displayName = \“ About Us \”,Active = true。现在编辑记录。这是要匹配的条件。
1-UrlName = \“ About \”,displayName = \“ About Test \”,Active = true->应该更新。
2-UrlName = \“关于\”,displayName = \“关于我们\”,活动=否->应该更新。
3-UrlName = \“ About \”,displayName = \“ About Test \”,Active = false->应该更新。
重要说明:4-UrlName = \“ newnotexist \”,displayName = \“ About test \”,Active = false->这应更新UrlName,并在更改后休息。
5-UrlName = \“ Contact \”,displayName = \“ About Test \”,Active = false->这不应更新并生成错误。
希望您能理解我的想法。
解决方法
基于更新后的问题,如果我对它的理解正确,我认为此解决方案将为您服务。
var urlNameExists = _sb.Any(x => x.UrlName == urlName && x.Id != currentEditId);
if (urlNameExists)
throw Exception(\"A record with that UrlName already exists\");
TryUpdateModel(existingMenu);
_menu.Add();
, bool alreadyInDb = (from p in _db.SubMenus where p.UrlName = urlName select p).Count() > 0;
if (alreadyInDb)
{
bool shouldAddRecord = (from p in _db.SubMenus where p.DisplayName == displayName && p.Active == active select p).Count() == 0;
if (shouldAddRecord)
{
TryUpdateModel(existingMenu);
_menu.Add();
}
}
, private void Update(string urlName,string display,bool active)
{
item = db_.SubMenus.SingleOrDefault(x => x.UrlName == urlName);
if (item == null)
{
// Save new item here
}
else
{
if (item.DisplayName == display && item.Active == active)
{
// Error,fields haven\'t changed and url already in db
}
else
{
// Save because fields have changed
}
}
}
希望这可以帮助!!