【问题标题】:Validate entry length based on database-first entity model基于数据库优先实体模型验证条目长度
【发布时间】:2015-07-07 18:07:10
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net webforms entity-framework-6 ef-database-first


    【解决方案1】:

    您可以为生成的 POCO 创建部分类,并在那里应用重新生成时不会被覆盖的验证:Add data annotations to a class generated by entity framework

    【讨论】:

    • 你能详细说明它是如何在网络表单中使用的吗?
    【解决方案2】:

    我找到了一个很好的解决方案。从 asp.net 4.5 开始,可以将 Data-Annotation 属性与 WebForms 和 Entity Frameworks 一起使用。具体来说:

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

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

    【讨论】:

    • 但是您仍然需要硬编码 40 以获得最大长度。我也在寻找一种在视图和模型上没有硬编码的解决方案。换句话说,当我将我的数据库字段大小更改为 1000 时,我的代码不会受到影响并按照它运行。有什么想法吗?
    • 不幸的是,您仍然需要硬编码最大长度,这是我还没有解决的问题。这个答案有点帮助,因为它将常数放在一个地方(但不是很多!)。如果您找到了一种按照您在评论中描述的正确/动态的方法,我会非常感兴趣。
    • 是的,我也在寻找解决方案。我会在找到解决方案时分享解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多