没有找到用于实现部分方法OnValidate声明的定义声明

时间:2014-02-03 08:31:12

标签: c# asp.net asp.net-mvc linq

我是LINQ的新手,并使用Linq to Sql在asp.net中工作,我正在尝试验证数据模型字段..我的应用程序中有两个项目(类库)“Common”& “管理”意味着两个不同的命名空间和我的应用程序是基于层的“数据访问层”和“业务流程层”

我在Generated Class中使用OnValidate方法来验证字段

命名空间常见

[Table(Name="dbo.tblaccounts")]

    public partial class tblaccount : INotifyPropertyChanging, INotifyPropertyChanged
    {
        #region Extensibility Method Definitions

            partial void OnValidate(System.Data.Linq.ChangeAction action)
            {
                if (!Char.IsUpper(this._ACCOUNT[0]))
                {
                    throw new ValidationException(
                        "Garage Name must start with an uppercase letter.");
                }
            }
    }

数据访问层中的命名空间管理

internal bool SaveGarage(tblaccount oGarage)
        {

            ChangeSet changeSet = null;
            int changeCount = 0;
            using (CommonDataContext GarageDC = new CommonDataContext(Settings.ConnectionString))
            {

                GarageDC.DeferredLoadingEnabled = false;
                try {
                if (oGarage.RowVersion == null)
                {
                    //insert Garage details
                    GarageDC.tblaccounts.InsertOnSubmit(oGarage);

                    changeSet = GarageDC.GetChangeSet();
                    changeCount = changeSet.Inserts.Count;
                    GarageDC.SubmitChanges();
                    Message = "Garage saved successfully.";

                }
                else
                {
                    //updates a Garage
                    GarageDC.tblaccounts.Attach(oGarage, true);
                    changeSet = GarageDC.GetChangeSet();
                    changeCount = changeSet.Updates.Count;

                    try
                    {
                        GarageDC.SubmitChanges();
                        Message = "Garage Updated successfully.";
                    }
                    catch (ChangeConflictException cex)
                    {

                        foreach (ObjectChangeConflict conflictObject in GarageDC.ChangeConflicts)
                        {
                            // expose the neccessary information,
                        }

                    }

                }
                }
               // here i want to get the validation exception
                catch (Exception ex)
                {

                    Message = ex.ToString();

                }

            }
            if (changeCount > 0) { return true;

            }
            else { return false; }
        } 

如果您在应用程序中的不同项目中使用不同的命名空间,请建议我如何验证数据模型字段...我已经使用管理项目引用了一个公共命名空间dll

当我构建我的项目时,我收到此错误

  

没有找到实施部分声明的定义声明   方法   'PeaceStar.Common.Data.tblaccount.OnValidate(System.Data.Linq.ChangeAction)'

1 个答案:

答案 0 :(得分:2)

  

如果您正在使用,请建议我如何验证数据模型字段   应用程序中不同项目中的不同命名空间

我会使用DataAnotations为您提供完全不同且简单的解决方案。使用较少的代码,这种方法更加清晰。

让我们说你的模型将是 -

public class NewModel
{
    [RegularExpression("^[A-Z][A-Za-z]{3,19}$", ErrorMessage="First character of name should be capital")]
    public string Name { get; set; }
}

在模型中,我们说输入名称的第一个字符应始终为大写。

然后我们进入索引视图 -

@model MVC.Controllers.NewModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@using (Html.BeginForm("Submit", "NewModel", FormMethod.Post))
{
    @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
    <input type="submit" value="Create" class="btn btn-default" />
}

单击“提交”按钮后,我们可以使用ModeState.IsValid -

在“提交操作”中进行验证。
    public ActionResult Submit(NewModel model)
    {
        if (!ModelState.IsValid)
            return View("Index");

        return View();
    }

所以当我们进入像 rami -

这样的工作时

enter image description here

当我们输入正确的工作(如 Rami )时,将通过验证并呈现提交视图。