实体框架中的数据验证

本文关键字:数据 验证 框架 实体 | 更新日期: 2023-09-27 18:10:31

我使用实体框架与ASP。我已经准备好了我的验证代码,我正在使用实体框架自己的验证过程。但是有一个问题,例如在我的模型和数据库中有一个名为Amount的十进制字段。我使用如下代码:

Item.Amount = decimal.Parse(Request.Form["ItemAmount"]);

这里是问题,如果输入是非数字,我得到一个错误(显然)。我可以很容易地通过检查输入是否是数字来修复它,但如果我那样做,就会有太多的验证检查。我的意思是,我检查它是否在代码中首先是数字,然后实体框架再次检查值,所以我使用两个不同的验证过程,这对我来说似乎很糟糕。

当然也有客户端,也许我可以使用数字文本框,但我还是不确定。

任何想法?

这是完整的代码,它可能是可怕的,我是很新的实体框架(像3-4天):

if (IsPost)
{
    try
    {
        Worker curWorker = new Worker();
        try
        {
            curWorker = m.Workers.Find(decimal.Parse(Request.Form["WorkerId"]));
        }
        catch (Exception)
        {
            errors += "Lütfen bir personel seçin. <br />";
        }
        overhour.Worker = curWorker;
        overhour.PhaseId = curPhase.PhaseId;
        try
        {
            overhour.OverhourAmount = decimal.Parse(Request.Form["OverhourAmount"]);
        }
        catch (Exception)
        {
            errors += "Süre (Saat) alanı sayısal olmalıdır. <br />";
        }
        overhour.OverhourDate = DateTime.Today;
        curWorker.Overhours.Add(overhour);
        Accounting accounting = new Accounting();
        accounting.AccountingMethod = 0;
        accounting.AccountingNote = curWorker.WorkerFullName + " adlı personelin, " + overhour.OverhourAmount + " saat süreli, " + DateTime.Today.ToShortDateString() + " tarihli mesai kaydı.";
        accounting.AccountingType = 3; // Maaş
        accounting.AccountingBorc = 0;
        accounting.AccountingAlacak = curWorker.WorkerOverWorkSalary * overhour.OverhourAmount;
        accounting.Phases = curPhase;
        curWorker.Accountings.Add(accounting);
        if (errors != "")
        {
            throw new WrongValueException(errors);
        }
        m.SaveChanges();
        Response.Redirect(Page.ParentPage);
    }
    catch (DbEntityValidationException ex)
    {
        errors = kStatic.getValidationErrors(ex.EntityValidationErrors, "<br />");
    }
    catch (WrongValueException ex)
    {
        errors = ex.Message.ToString();
    }
    catch (Exception ex)
    {
        errors = "Bilinmeyen hata, teknik detaylar: " + ex.Message;
    }
}

实体框架中的数据验证

我要做的是创建一个扩展方法,例如像这两个。

    public static decimal AsDecimal(this string value)
{
    decimal result;
    return decimal.TryParse(value, out result) ? result : 0;
}
public static decimal? AsNullableDecimal(this string value)
{
    decimal result;
    bool IsValid = decimal.TryParse(value, out result);
    if (IsValid)
    {
        return result;
    }
    else
    {
        return null;
    }
}

然后像这样检查decimal的值

decimal? value = Request.Form["WorkerId"].ToString().AsDecimal()
if (value.HasValue) //AsDecimal is overloaded you can make it return 0 if you wish
 //dome something
else
//do something.
我想这应该给你指明正确的方向。另外,客户端验证很糟糕,用户总是可以使用开发人员工具之类的工具来更改它。不要依赖客户端验证