C# 基于数据库第一实体模型验证条目长度

C# 基于数据库第一实体模型验证条目长度,c#,asp.net,webforms,entity-framework-6,ef-database-first,C#,Asp.net,Webforms,Entity Framework 6,Ef Database First,我的客户机首先使用c#、EF6.0数据库和webforms。我想验证aspx表单中文本框条目的最大长度。我不想硬编码最大长度的客户端或服务器端,而是想从EF6.0实体模型中检索它,以便它与基础数据库第一个字段的长度匹配。该字段是nvarchar(40)。 (如果我在“代码优先”场景中工作,我会尝试使用验证注释,但在“数据库优先”中这似乎不可能) 如何根据基础数据库的第一个字段长度进行验证?您可以为生成的POCO创建分部类,并在那里应用在重新生成时不会被覆盖的验证:您可以为生成的POCO创建分部类

我的客户机首先使用c#、EF6.0数据库和webforms。我想验证aspx表单中文本框条目的最大长度。我不想硬编码最大长度的客户端或服务器端,而是想从EF6.0实体模型中检索它,以便它与基础数据库第一个字段的长度匹配。该字段是nvarchar(40)。 (如果我在“代码优先”场景中工作,我会尝试使用验证注释,但在“数据库优先”中这似乎不可能)


如何根据基础数据库的第一个字段长度进行验证?

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

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

我找到了一个很好的解决方案。由于asp.net 4.5,可以在WebForms和实体框架中使用数据注释属性。具体而言:

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; }
    }

}

(这不会从数据库第一元数据中检索常量,但会将其保留在一个位置。)

我找到了一个好的解决方案。由于asp.net 4.5,可以在WebForms和实体框架中使用数据注释属性。具体而言:

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; }
    }

}

(这不会首先从数据库元数据中检索常量,但会将其保留在一个位置。)

能否详细说明如何在webforms中使用该常量?能否详细说明如何在webforms中使用该常量?但仍需硬编码40以获得最大长度。我也在寻找一个解决方案,没有硬代码的视图和模型。换句话说,当我将我的数据库字段大小更改为1000时,我的代码不受影响,并按照以下规则运行。有什么想法吗?不幸的是,你仍然需要硬编码最大长度,这是一个我还没有解决的问题。这个答案有点帮助,因为它把常数放在一个地方(但不是很多!)。如果你能找到一种方法,如你在评论中所描述的那样,正确地/动态地完成它,我会非常感兴趣。是的,我也在寻求解决方案。我将在找到解决方案时与您分享。但您仍需要将最大长度硬编码为40。我也在寻找一个解决方案,没有硬代码的视图和模型。换句话说,当我将我的数据库字段大小更改为1000时,我的代码不受影响,并按照以下规则运行。有什么想法吗?不幸的是,你仍然需要硬编码最大长度,这是一个我还没有解决的问题。这个答案有点帮助,因为它把常数放在一个地方(但不是很多!)。如果你能找到一种方法,如你在评论中所描述的那样,正确地/动态地完成它,我会非常感兴趣。是的,我也在寻求解决方案。我将在找到解决方案时与大家分享。