使用 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:以原子方式保存双向引用
在使用 EF 4.1 Code-First 的 Include 和/或 Select 方法时订购导航属性?