Mise à jour
Vérification de Service OData de StackOverflow c'est exactement comme Posts / PostTags / Tags ... Comment puis-je reproduire cela, s'il vous plaît ?
J'ai donc une classe simple appelée BlogPost - rien de spécial. Juste un billet de blog. Maintenant, je souhaite ajouter un balisage pour cette classe. Exactement comme le tags pour une question StackOverflow - 5 chaînes de caractères, délimitées par des espaces. Et ensuite enregistrer ces données dans ma base de données Sql Server 2008 en utilisant Entity Framework 4.
Donc, au début, j'ai pensé que je pouvais simplement ajouter un ICollection<string> Tags { get; set; }
ou un StringCollection Tags { get; set; }
et pour la base de données, il suffit d'avoir une nouvelle table appelée Tags
qui est une clé étrangère au BlogPost et un VarChar(100) Tag
champ.
Mais je me suis dit que si je faisais cela, j'aurais beaucoup de balises en double dans cette table de base de données. Est-il possible d'avoir deux tables, peut-être.
- BlogPostsToTags
- Tags
Où les étiquettes sont toutes des instances uniques.
C'est facile à modéliser dans la base de données, mais je n'ai aucune idée de la façon de le faire dans EF ? Est-ce une bonne façon de le modéliser ? Est-ce que c'est ce qui se fait ici à l'OS ?
J'aime vraiment avoir un ICollection<string> Tags { get; set; }
(c'est beau et propre) mais je ne sais pas comment faire pour avoir cela ET avoir des balises uniques dans la base de données en utilisant EF comme accès aux données.
Je ne sais pas comment ajouter des balises à un article de blog et m'assurer que ces balises sont uniques tout en faisant référence à l'article de blog.
Par exemple, est-ce que cela devrait être la responsabilité de la base de données, de sorte que lorsque j'essaie d'enregistrer un article de blog, à ce moment-là, je traite les étiquettes de manière unique... en vérifiant d'abord si elles existent, puis en insérant ou en mettant à jour l'étiquette unique... et en utilisant cette référence Id dans la table BlogPostsToTags ? Que se passe-t-il en cas de conditions de course ? Dois-je utiliser des transactions pour cela ... et si oui ... qu'en est-il des performances de lecture si la table est verrouillée ?