我的問題的答案應該很明顯,但我找不到它。我有一個有一個表的edmx文件。有一個類型爲string
的字段。 EF總是生成nvarchar(這是預期的),但我需要一個ntext
而不是nvarchar
對於該字段,因爲4000對我來說太小了。實體框架和SQL精簡版 - 我如何獲得ntext?
那麼告訴我 - 告訴EF生成ntext
字段的正確方法是什麼?
PS使用實體框架4,SQL CE 3.5
我的問題的答案應該很明顯,但我找不到它。我有一個有一個表的edmx文件。有一個類型爲string
的字段。 EF總是生成nvarchar(這是預期的),但我需要一個ntext
而不是nvarchar
對於該字段,因爲4000對我來說太小了。實體框架和SQL精簡版 - 我如何獲得ntext?
那麼告訴我 - 告訴EF生成ntext
字段的正確方法是什麼?
PS使用實體框架4,SQL CE 3.5
我猜你是第一次使用的模式,不是嗎?您可以簡單地爲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生成過程中的自定義邏輯。
如果您的項目包含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; }
}
另請注意,如果您使用的不是SQL CE(例如SQL Express或SQL Server),您需要用'TypeName =「text」替換'TypeName =「ntext」'' – Andrew 2012-03-22 12:27:43
只需設置屬性「的MaxLength 「在設計師的」最大「。這將在SQL CE數據庫中生成一個ntext字段。
謝謝!這正是我需要的。 – Jefim 2011-05-27 12:29:28
謝謝@Ladislav,但我沒有定義模型,因此我如何才能使項目使用修改的模板? – Andrew 2012-03-22 10:24:14
@Andrew:你是什麼意思:*我沒有定義模型* – 2012-03-22 10:53:59