我是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)'
答案 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 -
这样的工作时
当我们输入正确的工作(如 Rami )时,将通过验证并呈现提交视图。