Domanda

Come si creano colonne binarie nel DB usando il builder Schema di SubSonic?

Quindi stasera ho deciso di immergermi in SubSonic. Vedo molte domande qui e ottime risposte da Rob e da molti altri. Vedo che SubSonic è un ORM, con i modelli T4 può generare alcune classi molto belle ed efficienti da un database esistente.

Ma voglio andare dall'altra parte. Ho un dominio molto ricco e desidero creare le mie tabelle ad hoc dal mio dominio usando SubSonic e l'opzione RunMigrations.

Tutto funziona estremamente bene (ha anche scritto la mia funzione Upgrade () che rileva se la base di codice ha delle modifiche in base al numero di revisione dell'Assemblea, e quindi migra tutti gli aggiornamenti degli oggetti nel DB - piuttosto chiari ed efficaci per l'aggiornamento automatico del DB ).

Ma come si fa a SubSonic creare colonne binarie? Forse non lo sto usando come previsto (non sto usando Query o SqlQuery, solo l'interfaccia Linq di SimpleRepository). Vedi sotto (usando un comune esempio di "Post di blog"):

[SubsonicTable]
public class Post
{
    [SubSonicPrimaryKey]
    public Int32 PostID { get; set; }

    [SubSonicStringLength(1024)]
    public String Title { get; set; }

    [SubSonicLongString]
    public String Body { get; set; }

    [SubSonicStringLength(5)]
    public String? LangaugeCode { get; set; }

    public DateTime? Published { get; set; }

    public PostType PostType { get; set; }
    public Int32 PostTypeID
    {
        get
        {
            return this.PostType.GetHashCode();
        }
        set
        {
            Enum.Parse(typeof(PostType), value.ToString());
        }
    }

    public Byte[] Image { get; set; }
}

public enum PostType
{
    NotSet = 0
    ,BlogPost
    ,Comment
    ,Trackback
    ,Pingback
}

Quando questo oggetto Post viene salvato, o interrogato, tramite SimpleRepository, mancano due colonne: PostType (o tipo enum PostType) e Image (di tipo byte [] array).

Ora, ho trovato l'hack-of-an-answer qui che qualcuno ha pubblicato sull'utilizzo di un PostTypeID Int32 per aggirare il problema enum. Dai Rob, SubSonic dovrebbe essere in grado di supportare i tipi di enum su INT e viceversa. ;) Ecco perché ho PostTypeID e questo viene creato e scritto correttamente.

Ecco un esempio del comando che crea la tabella Post per me, oltre a inserire il primo post:

Post p = new Post();
p.Title = "My Title";
p.Body = "The body of the post.";
p.PostType = PostType.BlogPost;

var repo = new SimpleRepository(SimpleRepositoryOptions.RunMigrations);
repo.Add(p);

NOTA: non utilizzare questo codice in produzione, poiché RunMigrations presenta molte query TSQL aggiuntive alla prima esecuzione.

Nell'esempio sopra puoi vedere che questo creerà la tabella Posts se non esiste, oltre a creare le colonne.

Ma questo non crea le due colonne sopra menzionate: PostType né Image.

Pensieri? E grazie in anticipo.

È stato utile?

Soluzione

Avevo pensato che avessimo uno sniffer binario - si scopre che non fa il trucco. Ho bisogno di aggiungere questo - meglio ancora se non ti dispiace biforcare quello che abbiamo e aggiungerlo - ti amerei per questo. Prendi un bottino nella nostra roba Extensions - vuoi mod ToDataTable () (penso) ...

Se non ne hai la possibilità, lo aggiungerò quando rivedo SimpleRepo il prossimo ...

Altri suggerimenti

Mi sono appena imbattuto nel problema della colonna binaria. Se hai una patch / correzione sarei disposto a testarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top