2011-05-27 63 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字段。