sto lavorando con il Codice Prima caratteristica di Entity Framework e sto cercando di capire come posso specificare i tipi di dati di colonna che dovrebbe essere creato quando il database viene generato automaticamente.Come faccio a specificare che una proprietà dovrebbe generare una colonna di testo piuttosto che un nvarchar (4000)
Ho un modello semplice:
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; }
}
Quando eseguo la mia applicazione, un database SQL CE 4.0 viene creato automaticamente con il seguente schema:
Fin qui, tutto bene ! Tuttavia, i dati sarò inserimento nelle proprietà Body
e BodyHtml
è normalmente maggiore della lunghezza massima consentita per il tipo NVarChar
colonna, quindi voglio EF per generare Text
colonne per queste proprietà.
Tuttavia, non riesco a trovare un modo per farlo! Dopo un po 'di usare Google e la lettura, ho provato a specificare il tipo di colonna utilizzando DataAnnotations
, dalle informazioni che si trovano in this answer:
using System.ComponentModel.DataAnnotations;
...
[Column(TypeName = "Text")]
public string Body { get; set; }
Questo getta la seguente eccezione (quando il database viene eliminato e l'applicazione è re-run):
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.
Ma non ho idea di che cosa spazio dei nomi o alias dovrei specificando, e non ho trovato nulla che mi avrebbe detto.
Ho anche provato a cambiare l'annotazione di cui al this reference:
using System.Data.Linq.Mapping;
...
[Column(DbType = "Text")]
public string Body { get; set; }
In questo caso un database è creato, ma la colonna Body
è ancora un NVarChar(4000)
, così sembra che l'annotazione viene ignorata.
Qualcuno può aiutare? Questo sembra che dovrebbe essere un requisito abbastanza comune, ma la mia ricerca è stata infruttuosa!
Il testo CE supporta? Guardando nella lista dei tipi di dati, posso vedere ntext, ma non il testo. –
@ Damiano, hai ragione, grazie - aggiungi questo come risposta (e aggiungi un collegamento all'elenco dei tipi di dati) e accetterò. –
Non sono riuscito a trovare un elenco online di tipi di dati: ho dovuto scaricare CE BOL per verificare. Sembra che Kristof Claes abbia aggiunto una risposta che copre lo stesso terreno. –