我的问题的答案应该很明显,但我找不到。我有一个包含一个表的 edmx 文件。有一个类型的字段string
。EF 总是为此生成 nvarchar (这是意料之中的),但我需要一个ntext
而不是nvarchar
那个字段,因为 4000 对我来说太小了。
那么告诉我 - 告诉 EF 生成ntext
字段的正确方法是什么?
PS 使用实体框架 4、SQL CE 3.5
我的问题的答案应该很明显,但我找不到。我有一个包含一个表的 edmx 文件。有一个类型的字段string
。EF 总是为此生成 nvarchar (这是意料之中的),但我需要一个ntext
而不是nvarchar
那个字段,因为 4000 对我来说太小了。
那么告诉我 - 告诉 EF 生成ntext
字段的正确方法是什么?
PS 使用实体框架 4、SQL CE 3.5
我猜你首先使用模型,不是吗?NTEXT
您可以简单地为 SQL DDL 生成创建自定义 T4 模板,并包含在字段定义为最大大小时将使用的逻辑。
默认模板开启:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToSQL10.tt
只需复制此模板并找到创建数据类型的逻辑即可。一旦你有你的模板,将模型属性(在设计器中)中的 DDL 生成模板更改为你的修改版本。
您可以使用生成模板做更多事情,因为您可以向模型 (XML) 添加一些注释,并将它们用于 SQL 生成过程中的自定义逻辑。
只需将设计器中的属性“MaxLength”设置为“Max”。这将在 SQL CE DB 中生成一个 ntext 字段。
如果您的项目包含 ADO.Net 实体数据模型 ( .edmx
),请参阅Ladislav 的出色回答。
但是,如果您使用的是Code First库并且您的项目不包含 a.edmx
那么您可以使用System.ComponentModel.DataAnnotations.ColumnAttribute
来指定列类型:
using System.ComponentModel.DataAnnotations;
public class Note {
[Column("Note", TypeName="ntext")]
public string Note { get; set; }
}