Spinning plus loin sur le previous question j'ai eu. Disons que j'ai hérité de BlogEntry et de Commentaire de Post. Je veux maintenant les personnaliser un peu. Un commentaire à un billet de blog n'a pas besoin d'un titre, mais un commentaire besoin d'une référence utilisateur je propose donc ces deux champs à partir de Post et en commentaires et une entrée de blog comme celui-ci:EF4 - question ObjectContext et héritage personnalisée
public abstract class Post
{
public virtual int Id { get; set; }
public virtual string Text { get; set; }
public virtual DateTime CreatedAt { get; set; }
}
public class BlogEntry : Post
{
public virtual string Header { get; set; }
public virtual Blog Blog { get; set; }
public virtual IEnumerable<Comment> Comments { get; set; }
}
public class Comment : Post
{
public virtual string Header { get; set; }
public virtual int UserId { get; set; }
public virtual BlogEntry BlogEntry { get; set; }
}
Maintenant, je crée mon contexte d'objet personnalisé :
public class EntityContext : System.Data.Objects.ObjectContext
{
public EntityContext() : base("name=Entities", "Entities")
{
this.Blogs = CreateObjectSet<Blog>();
this.Posts = CreateObjectSet<Post>();
this.Entries = CreateObjectSet<BlogEntry>();
this.Comments = CreateObjectSet<Comment>();
}
public ObjectSet<Blog> Blogs { get; set; }
public ObjectSet<Post> Posts { get; set; }
public ObjectSet<BlogEntry> Entries { get; set; }
public ObjectSet<Comment> Comments { get; set; }
}
Cela me donne ce qui suit en fait un message d'erreur assez descriptif:
méthode d'essai a lancé exception: System.ArgumentException: Il y a no EntitySets défini pour le type d'entité spécifié 'BlogEntry' . Si 'BlogEntry' est un type dérivé, utilisez plutôt le type de base . Par exemple, vous verrait cette erreur si vous avez appelé CreateObjectSet() et DiscontinuedProduct est un type d'entité connu mais n'est pas directement mappé à un EntitySet. Le type DiscontinuedProduct peut être un type dérivé où le type parent est mappé au EntitySet ou le type DiscontinuedProduct peut ne pas être mappé à un EntitySet du tout. Nom du paramètre: TEntity
Maintenant, je ne suis pas un maître d'héritage et d'autres choses, mais la façon dont je vois cela serait d'ajouter un ensemble d'entrées et commentaires comme ObjectSet < post> qui résoudrait mes problèmes?
Oui, je ne l'ai pas eu le temps de regarder plus loin. Ce que vous dites semble vrai. Je viens de finir d'écrire un énorme blog sur mes découvertes aujourd'hui. On dirait que je dois en écrire un autre demain sur l'héritage POCO :) – mhenrixon
Merci pour le conseil avec juste enlever le bagage! :) – mhenrixon