2011-05-27 57 views
1

我的问题的答案应该很明显,但我找不到它。我有一个有一个表的edmx文件。有一个类型为string的字段。 EF总是生成nvarchar(这是预期的),但我需要一个ntext而不是nvarchar对于该字段,因为4000对我来说太小了。实体框架和SQL精简版 - 我如何获得ntext?

那么告诉我 - 告诉EF生成ntext字段的正确方法是什么?

PS使用实体框架4,SQL CE 3.5

回答

3

我猜你是第一次使用的模式,不是吗?您可以简单地为SQL DDL生成创建自定义的T4模板,并包含在使用最大大小定义字段时将使用NTEXT的逻辑。

默认的模板是:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen\SSDLToSQL10.tt 

只需复制此模板,并找到其中创建数据类型的逻辑。将模型属性(在设计器中)更改为修改后的版本后,将模板更改为DDL生成模板。

There is much more you can do使用生成模板,因为您可以将一些注释添加到您的模型(XML)并将它们用于SQL生成过程中的自定义逻辑。

+0

谢谢!这正是我需要的。 – Jefim 2011-05-27 12:29:28

+0

谢谢@Ladislav,但我没有定义模型,因此我如何才能使项目使用修改的模板? – Andrew 2012-03-22 10:24:14

+0

@Andrew:你是什么意思:*我没有定义模型* – 2012-03-22 10:53:59

0

如果您的项目包含ADO.Net实体数据模型(.edmx),则请参阅Ladislav's excellent answer

但是,如果你使用的代码第一次库和项目不包含.edmx那么你可以使用System.ComponentModel.DataAnnotations.ColumnAttribute指定列类型:

using System.ComponentModel.DataAnnotations; 

public class Note { 

    [Column("Note", TypeName="ntext")] 
    public string Note { get; set; } 

} 
+0

另请注意,如果您使用的不是SQL CE(例如SQL Express或SQL Server),您需要用'TypeName =“text”替换'TypeName =“ntext”'' – Andrew 2012-03-22 12:27:43

1

只需设置属性“的MaxLength “在设计师的”最大“。这将在SQL CE数据库中生成一个ntext字段。