使用 EF4 Code First 时如何控制生成的 nvarchar 列的长度?

Posted

技术标签:

【中文标题】使用 EF4 Code First 时如何控制生成的 nvarchar 列的长度?【英文标题】:How do you control the length of generated nvarchar columns when using EF4 Code First? 【发布时间】:2011-03-15 19:29:56 【问题描述】:

我正在使用 EF4 Code First (CTP5) 来生成我的数据库,并且我正在使用 DataAnnotations 来尝试控制生成的数据库架构。如果我使用 [Required] 属性,那么该列会正确生成为 NOT NULL,但是当我尝试使用 [StringLength(50)] 属性时,我的所有列最终都会被创建为 NVarChar(max)。

这是我的一个类(简化)的代码 sn-p,因此您可以看到我的问题:

public class Person

    public int PersonID  get; set; 

    // This property is generated as NVarChar(max) NOT NULL
    // I prefer it be NVarChar(50) NOT NULL
    [Required(ErrorMessage="Please enter a first name")]
    [StringLength(50, ErrorMessage="First name is too long")]
    public string FirstName  get; set; 

如果 [StringLength] 属性不起作用,是否有其他方法可以控制生成的 nvarchar 列长度?

谢谢, 布伦特·斯图尔特

【问题讨论】:

你一定做错了什么,因为这些数据注释对我有用。你在OnModelCreating 中映射任何东西吗?添加数据注释后是否重新创建了数据库? 感谢您确认它工作正常。得知这一点后,我决定检查我的工具,发现 LINQPad 没有正确报告这些列(CE4 数据库)。我使用 WebMatrix 检查了列类型,并确定它被正确创建。再次感谢。 您可以删除或更好地回答您自己的问题,因为它可能对其他人有用,并且答案不应在评论中。 【参考方案1】:

我发现我遇到的问题是由 LINQPad 中的一个错误引起的,它没有准确地报告我的 SQL Server CE 4 数据库的列类型。 [StringLength] 属性按应有的方式工作。

【讨论】:

以上是关于使用 EF4 Code First 时如何控制生成的 nvarchar 列的长度?的主要内容,如果未能解决你的问题,请参考以下文章

ef4.4 code first数据库新增时 初始化表数据不成功

EF4 Code First + SQL Server CE:以原子方式保存双向引用

EF4 CTP5 Code First 方法忽略表属性

在使用 EF 4.1 Code-First 的 Include 和/或 Select 方法时订购导航属性?

MVC 3 Code first First,内置成员身份验证

MVC3+EF4.1学习系列-------创建EF4.1 code first的第一个实例