基于数据库优先实体模型验证条目长度

本文关键字:验证 实体模型 数据库 | 更新日期: 2023-09-27 18:01:30

我的客户端使用c#, EF6.0数据库优先,和webforms。我想验证aspx表单中文本框条目的最大长度。我不想硬编码最大长度的客户端或服务器端,相反,我想从EF6.0实体模型中检索它,以便它与底层数据库优先字段的长度匹配。该字段为nvarchar(40)。(如果我在"代码优先"的情况下工作,我会尝试使用验证注释,但这似乎不可能在"数据库优先")。

如何根据底层数据库优先字段长度进行验证?

基于数据库优先实体模型验证条目长度

您可以为生成的poco创建部分类,并在那里应用验证,这些验证在您重新生成时不会被覆盖:

我找到了一个很好的解决方案。从asp.net 4.5开始,可以在WebForms和实体框架中使用Data-Annotation属性。具体来说:

using System.ComponentModel.DataAnnotations;
namespace Diary.DataAccess.Model
{
    // Accommodate EF database-first regeneration (required for webforms)
    [MetadataType(typeof(UserDetailMetaData))]
    public partial class UserDetail
    {
    }
    // Add the Data-Annotation attribute to the Title model-property.
    public class UserDetailMetaData
    {
        [MaxLength(40, ErrorMessage="Title must not be more than 40 characters long.")]
        public string Title { get; set; }
    }
}

(这不会从数据库优先的元数据中检索常量,而是将其保存在一个地方。)