EF4 Code First & SQLCE 4.0 - 生成数据库时出现异常

Posted

技术标签:

【中文标题】EF4 Code First & SQLCE 4.0 - 生成数据库时出现异常【英文标题】:EF4 Code First & SQLCE 4.0 - Exception when generating DB 【发布时间】:2011-08-29 06:38:12 【问题描述】:

我首先使用 EF4 4.1 代码并尝试使用 SQLCE 作为数据源。

指向 SQL Server 2008 实例时一切正常,但是当我更改为 SQLCE 时,出现以下异常:

不支持 MaxLength 大于 4000 的字符串列。

这是它抱怨的属性,你可以看到它的长度设置为 1024 个字符,所以我很难理解它为什么抱怨 4000 个字符?

[Required]
[DataType(DataType.Text), RegularExpression("http://www.*"), StringLength(1024)]
[Display(Name = "Page URL (http://www.)")]
public string Url  get; set; 

这是我的连接字符串:

<add name="DataContext" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCe.4.0" />

这是来自 global.asax 的数据库初始化器:

Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DataContext>());

任何想法我错过了什么?

谢谢:)

【问题讨论】:

您确定没有其他超过 4000 个字符长度的字符串列吗?如果您从属性中删除 StringLengthDataType 会发生什么?如果将 EntityFramework.dll 中的 StringLength 替换为 MaxLength 会发生什么? 同样的问题...我感觉数据库没有正确生成,抛出的异常是更深层次问题的结果。 【参考方案1】:

将 DataType 更改为 NVarchar(来自 Text)

【讨论】:

字符串不是有效的 EF 数据注释?尝试删除整个 DataType 项,但没有成功。

以上是关于EF4 Code First & SQLCE 4.0 - 生成数据库时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

EF4 CTP5 Code First 方法忽略表属性

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

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

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

EF 4.1 RC Code First - 映射到现有数据库并指定外键名称

EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型