gpt4 book ai didi

c# - EF 5 数据库首先使用自定义验证

转载 作者:行者123 更新时间:2023-11-30 20:04:32 24 4
gpt4 key购买 nike

为了体验 Entity Framework 的新特性,我创建了一个新的 MVC 4 互联网应用程序。
我将它连接到现有数据库并使用 dbContext 生成器生成模型类。

通过运行应用程序,我在编辑表单时遇到了一些验证错误。作为 DateTime 字段的示例,如果日期被插入为“12/10/2012”而不是 2012-10-12(如在 SQ Server 表示法中),系统会提示。
我试图在项目中找到验证代码,但在生成的代码中找不到它。

我的模型类之一如下:

public partial class Artist
{
public Artist()
{
}

public int Id { get; set; }
public string Name { get; set; }
public Nullable<System.DateTime> DateOfBirth { get; set; }

public virtual Countries Countries { get; set; }
}

如果使用数据库优先方法,如何自定义验证错误?
如果我用我的验证属性装饰模型,那么一旦再次生成模型类,它们就会被删除。

此外,在强制使用现有数据库的“真实世界”项目中,开发模型类的最佳方法是什么?
通过添加同名分部类来扩展自动生成的类?

编辑( View 的介绍部分):

@using (Html.BeginForm()) {
@Html.ValidationSummary(false)

<fieldset>
<legend>Movie</legend>

<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.DateOfBirth)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DateOfBirth)
@Html.ValidationMessageFor(model => model.DateOfBirth)
</div>

<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}

最佳答案

好吧,你总是可以使用元数据类

public partial class ArtistMetaData
{
[Required]
[StringLength(20)]
public string Name;//it can be a field instead of a property, must just have the same name and type than in your Model class
}

和部分类

[MetadataType(typeof(ArtistMetaData)]
public partial class Artist {
}

或者(我的首选解决方案)您可以使用外部验证库,例如出色的 FluentValidation

默认情况下,您有一个“基本”验证(可以在 global.asax 中删除),检查:非可空值...不为空(如默认 Required 属性),并且该值是正确的类型。

关于c# - EF 5 数据库首先使用自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12807282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com