首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.NET内核的数据库中检查给定值的最佳方法

在.NET内核的数据库中检查给定值的最佳方法
EN

Stack Overflow用户
提问于 2020-03-30 17:36:24
回答 1查看 281关注 0票数 0

我有以下控制器的操作:

代码语言:javascript
复制
public async Task<IActionResult> Create([FromForm]LanguageViewModel viewModel)
{
    if (!ModelState.IsValid)
    {
        return View(viewModel);
    }

    var newLanguage = new Language()
    {
        Sort = viewModel.Sort,
        LangCode = viewModel.Code,
        LangName = viewModel.Name
    };

    await _languageRepository.SaveAsync(newLanguage);

    return RedirectToAction("Index");
}

和以下viewModel

代码语言:javascript
复制
public class LanguageViewModel
{
    public int Sort { get; set; }
    [Required(ErrorMessage = "Language code is required")]
    public string Code { get; set; }
    [Required(ErrorMessage = "Language name is required")]
    public string Name { get; set; }
}

注意,LanguageViewModel不是我的域(实体框架)对象。对于我的数据库中的地图,我有另一个:

代码语言:javascript
复制
public class Language
{
    public int LanguageId { get; set; }

    public int Sort { get; set; }

    public string LangName { get; set; }

    public string LangCode { get; set; }
}

因此,我正在使用ASP.NET MVC Core3.1,我需要检查具有给定代码的Language是否已经存在。如果它存在,我想显示关于它的验证错误。你可以说我可以像这样解决它:

代码语言:javascript
复制
public async Task<IActionResult> Create([FromForm] LanguageViewModel viewModel)
{
    if (!ModelState.IsValid)
    {
        return View(viewModel);
    }

    var lang = await _languageRepository.All.FirstOrDefaultAsync(x =>
        x.LangCode.ToUpper() == viewModel.Code.ToUpper());

    if (lang != null)
    {
        ModelState.TryAddModelError("Code", $"The language with code {viewModel.Code} already exists");
    }

    if (!ModelState.IsValid)
    {
        return View(viewModel);
    }

    var newLanguage = new Language()
    {
        Sort = viewModel.Sort,
        LangCode = viewModel.Code,
        LangName = viewModel.Name
    };

    await _languageRepository.SaveAsync(newLanguage);

    return RedirectToAction("Index");
}

好的。它起作用了。但它是丑陋的:(也许有更好的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2020-03-30 17:48:45

也许这会是一个更干净的解决方案。

代码语言:javascript
复制
if (_languageRepository.Any(o => o.LangCode.Equals(txnId, StringComparison.InvariantCultureIgnoreCase))) 
{
    ModelState.TryAddModelError("Code", $"The language with code {viewModel.Code} already exists");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60927716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档