私は Entity Framework の Code First 機能を使用しており、データベースの自動生成時に作成する必要がある列のデータ型を指定する方法を見つけようとしています。
私は単純なモデルを持っています:
public class Article
{
public int ArticleID { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Summary { get; set; }
public string SummaryHtml { get; set; }
public string Body { get; set; }
public string BodyHtml { get; set; }
public string Slug { get; set; }
public DateTime Published { get; set; }
public DateTime Updated { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
アプリケーションを実行すると、SQL CE 4.0 データベースが次のスキーマで自動的に作成されます。
ここまでは順調ですね!Body
ただし、プロパティに挿入するデータは、BodyHtml
通常、列の型で許可されている最大長よりも大きいため、NVarChar
EFText
でこれらのプロパティの列を生成する必要があります。
しかし、私はこれを行う方法を見つけることができないようです! かなりのグーグルと読書の後、この回答DataAnnotations
にある情報から、を使用して列タイプを指定しようとしました:
using System.ComponentModel.DataAnnotations;
...
[Column(TypeName = "Text")]
public string Body { get; set; }
これにより、次の例外がスローされます (データベースが削除され、アプリが再実行された場合)。
Schema specified is not valid. Errors: (12,6) : error 0040: The Type text is not qualified with a namespace or alias. Only PrimitiveTypes can be used without qualification.
しかし、どの名前空間またはエイリアスを指定する必要があるのか わかりません。また、それを教えてくれるものも見つかりませんでした。
私はまた、この参照に従って注釈を変更しようとしました:
using System.Data.Linq.Mapping;
...
[Column(DbType = "Text")]
public string Body { get; set; }
この場合、データベースは作成されますが、Body
列はまだNVarChar(4000)
であるため、アノテーションは無視されているようです。
誰でも助けることができますか?これはかなり一般的な要件のように思えますが、私の検索は無駄でした!