我的客户端使用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; }
}
}
(这不会从数据库优先的元数据中检索常量,而是将其保存在一个地方。)