0

Je construis une application de blog personnel avec Entity Framework 4 CTP 5 POCO seulement, où un post peut avoir beaucoup Balises et Tag peut être dans de nombreux messages . Ma question est de savoir s'il faut construire un modèle many-to-many, ou avoir une table de recherche. Au début, j'essayais d'utiliser beaucoup-à-plusieurs, mais je ne sais pas comment faire de l'insertion, chaque fois qu'un nouveau post est posté (avec de nombreux tags sélectionnés), je ne sais pas quoi faire de sorte que les étiquettes doivent être associés au poste (. et ne pas insérer une nouvelle balise si le nom de la balise existe déjà)Entity Framework 4 CTP 5 POCO - Table plusieurs-à-plusieurs ou Liste de choix?

J'essaie alors de construire une table de recherche comme ceci:

Poster

public class Post 
{ 
    public int Id { get; set; } 

    [Required] 
    [StringLength(512, ErrorMessage = "Title can't exceed 512 characters")] 
    public string Title { get; set; } 

    [Required] 
    [AllowHtml] 
    public string Content { get; set; } 

    public string FriendlyUrl { get; set; } 
    public DateTime PostedDate { get; set; } 
    public bool IsActive { get; set; } 

    public virtual ICollection<Comment> Comments { get; set; } 
    public virtual ICollection<PostTagLookup> PostTagLookups { get; set; } 
} 

Ta g

public class Tag 
{ 
    public int Id { get; set; } 

    [Required] 
    [StringLength(25, ErrorMessage = "Tag name can't exceed 25 characters.")] 
    public string Name { get; set; } 
    public string FriendlyName { get; set; } 
    public virtual ICollection<PostTagLookup> PostTagLookups { get; set; } 
} 

PostTagsLookup

public class PostTagLookup 
{ 
    public int PostId { get; set; } 
    public int TagId { get; set; } 
} 

Le problème est que je ne suis pas sûr de savoir comment EF allez gérer la table de recherche (comment vais-je obtenir les mots clés d'un poste ou une collection de les postes lorsque je sélectionne un tag). Et avec le code ci-dessous, je suis une erreur disant PostTagLookup n'a pas de clé Id:

Toute suggestion sur la façon d'accomplir cette tâche? Merci beaucoup!

Répondre

0

J'ai lutté avec pour les derniers deux jours et a décidé d'aller avec la table de consultation comme prévu, et dans la table de consultation, ont également des références à la poste et modèle Tag en tant que tel:

public class PostTagLookup 
{ 
    public int Id { get; set; } 
    public int PostId { get; set; } 
    public int TagId { get; set; } 

    public virtual Post Post { get; set; } 
    public virtual Tag Tag { get; set; } 
} 

Peut-être pas le meilleur moyen mais ça marche :) Merci à tous pour regarder.

0

Je pense que votre modèle devrait fonctionner tel quel avec un léger ajustement: ajoutez une colonne/champ ID à l'entité PostTagLookup.

public class PostTagLookup 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGenerationOption.Identity)] 
    public int PostTagLookupId { get; set; } 

    //etc. 
} 

Cependant, je ne sais pas pourquoi vous ne voudriez pas EF gérer le nombre à plusieurs sous-jacent sur son propre. Lorsque vous avez un nouvel objet Post, par exemple, tout ce que vous avez à faire est d'ajouter des balises associées à la collection des balises de Post instanciées avant d'appeler le SaveChanges() dans votre contexte. Cela n'a-t-il pas fonctionné pour vous?

+0

J'ai essayé beaucoup-à-plusieurs, mais n'a pas fonctionné (c'est ma question originale: http://stackoverflow.com/questions/4571188/entity-framework-4-many-to-many-insertion) , il jette une erreur sur quelque chose lié à l'objet n'a pas été instancié suivant ** The_Smallest ** suggestion. Ensuite, il y a une autre suggestion disant que je devrais utiliser une table de recherche, sans la colonne 'Id'! – Saxman

Questions connexes