2009-09-13 8 views
1

Comment créer des colonnes binaires dans la base de données en utilisant le générateur de schéma de SubSonic? Donc, ce soir, j'ai décidé de plonger dans SubSonic. Je vois beaucoup de questions ici et de bonnes réponses de Rob et de beaucoup d'autres. Je vois que SubSonic est un ORM, avec les T4 Templates il peut générer des classes très belles et efficaces à partir d'une base de données existante.SubSonic généré DB Schema, les types binaires?

Mais, je veux aller dans l'autre sens. J'ai un très riche domaine, et je veux créer mes tables adhoc à partir de mon domaine en utilisant SubSonic et l'option RunMigrations. Tout fonctionne très bien (a 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 l'assembly, puis migre toutes les mises à jour de l'objet vers la base de données. DB).

Mais, comment SubSonic crée-t-il des colonnes binaires? Peut-être que je ne l'utilise pas comme prévu (je n'utilise pas Query ou SqlQuery, juste l'interface Linq de SimpleRepository). Voir ci-dessous (en utilisant un exemple "Blog post" 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 le SimpleRepository, il manque deux colonnes: PostType (ou type ENUM PostType) et l'image (de type byte [] array).

Maintenant, j'ai trouvé le hack-of-an-answer ici que quelqu'un a posté sur l'utilisation d'un PostTypeID Int32 pour contourner le problème enum. Allez Rob, SubSonic devrait être capable de supporter les types d'énumération en INT, et en revenir. ;) C'est pourquoi j'ai le PostTypeID, et cela est créé et écrit correctement.

Voici un exemple de la commande qui crée la table Poste pour moi, ainsi que l'insertion du premier message:

REMARQUE: Vous ne devez pas utiliser ce code dans la production, comme les RunMigrations a beaucoup de requêtes TSQL supplémentaires en première exécution.

Vous pouvez voir par l'exemple ci-dessus que cela créera la table Posts si elle 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.

Pensées? Et merci d'avance.

Répondre

4

J'ai eu pensé nous avions un renifleur binaire - s'avère qu'il ne fait pas l'affaire. Je dois ajouter ceci - mieux encore si cela ne vous dérange pas de forking ce que nous avons et en ajoutant cela - je vous aimerais pour cela. Prenez un butin à nos trucs Extensions - vous voulez mod ToDataTable() (je pense) ...

Si vous n'avez pas de chance - je vais ajouter ceci quand je relancer SimpleRepo suivant ...

+1

Excellent Rob! Je me demandais si vous accepteriez de contribuer au projet. Je cherchais Subsonic pour remplacer la version de CreateDatabase() de Linq, qui n'a pas de chemin de migration. Il y a d'autres colonnes à, telles que Enums (int), Xml, et autres. Choses que Linq soutient richement. Je vais essayer de rapprocher Subsonic de ceux-ci. :) Merci! – eduncan911

+0

Mais bien sûr - c'est comme ça que nous grandissons :). Regardez ceci: http: //www.subsonicproject.com/docs/Submit_Patch Je pourrais utiliser toute l'aide que vous pouvez donner ... –

0

Je viens de me heurter au problème des colonnes binaires. Si vous avez un patch/correctif, je serais prêt à le tester.

+0

Techniquement, vous devriez avoir commenté - pas posté de réponse. Mais étant une nouvelle recrue, vous n'avez pas accès aux commentaires. :) Je pense que ça vient après avoir obtenu 10 points. Anyhoot, ouais je l'ai corrigé mais je n'ai pas vérifié le patch pour que Rob C. le regarde. Ce que j'ai trouvé, c'est que le SimpleRepository utilisait toujours les anciens scripts SQL de l'ancien Subsonic - pas le plus récent Sql Query Builder qu'ils utilisent maintenant. Je voulais faire un commentaire à Rob C. sur le moment où ce changement pour utiliser les choses les plus récentes se produirait - avant de vérifier dans un patch sur les choses plus anciennes. – eduncan911

+0

Merci pour la mise à jour. Je me demandais pourquoi je ne pouvais pas commenter ... Je voulais juste mettre mon nom là-bas en tant que testeur si nécessaire. – Rob