Question

Comment créez-vous des colonnes binaires dans la base de données à l'aide du générateur de schéma de SubSonic?

Alors ce soir, j'ai décidé de plonger dans SubSonic. Je vois beaucoup de questions ici et d'excellentes réponses de Rob et beaucoup d'autres. Je vois que SubSonic est un ORM. Avec les modèles T4, il peut générer des classes très agréables et efficaces à partir d’une base de données existante.

Mais, je veux aller dans l'autre sens. J'ai un domaine très riche et je veux créer mes tables à partir de mon domaine en utilisant SubSonic et l'option RunMigrations.

Tout fonctionne extrêmement bien (j'ai même écrit ma propre fonction Upgrade () qui détecte si la base de code a été modifiée en fonction du numéro de révision de Assembly, puis migre toutes les mises à jour d'objet vers la base de données, ce qui est assez simple et efficace pour la mise à niveau automatique de la base de données. ).

Mais comment avez-vous pu créer des colonnes binaires avec SubSonic? Peut-être que je ne l'utilise pas comme prévu (je n'utilise pas Query ou SqlQuery, uniquement l'interface Linq de SimpleRepository). Voir ci-dessous (à l'aide d'un "exemple de blogueur" commun):

[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
}

Lorsque cet objet Post est enregistré ou interrogé via SimpleRepository, il manque deux colonnes: PostType (ou type enum PostType) et Image (de type byte [] array).

Maintenant, j’ai trouvé le bidouillage de réponse que quelqu'un a posté sur l'utilisation d'un Int32 PostTypeID pour contourner le problème d'enum. Allez Rob, SubSonic devrait être capable de supporter les types enum à INT, et en revenir. ;) C’est pourquoi j’ai le PostTypeID, qui est créé et écrit correctement.

Voici un exemple de commande qui crée la table Post pour moi et insère le premier message:

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);

REMARQUE: vous ne devez pas utiliser ce code en production, car RunMigrations contient beaucoup de requêtes TSQL supplémentaires à la première exécution.

Vous pouvez voir dans l'exemple ci-dessus que cela créera le tableau Posts s'il n'existe pas, ainsi que la création des colonnes.

Mais cela ne crée pas les deux colonnes mentionnées ci-dessus: PostType ni Image.

Des pensées? Et merci d’avance.

Était-ce utile?

La solution

J'avais pensé que nous avions un renifleur binaire - il s'avère que cela ne fait pas l'affaire. Je dois ajouter ceci. Mieux encore, si cela ne vous dérange pas de demander ce que nous avons et de l'ajouter, je vous en serais reconnaissant. Prenez un butin dans nos extensions - vous voulez modifier ToDataTable () (je pense) ...

Si vous n'en avez pas la possibilité, j'ajouterai ceci au prochain SimpleRepo ...

Autres conseils

Je viens de rencontrer le problème de la colonne binaire moi-même. Si vous avez un correctif / correctif, je serais prêt à le tester.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top