Girando más lejos en el previous question que tenía. Digamos que heredo BlogEntry y Comment from Post. Ahora quiero personalizarlos un poco. Un comentario a un post no necesita un título, pero un comentario necesita una referencia para el usuario, así que mover estos dos campos hacia fuera del poste y en el comentario y el blog de entrada como esta:EF4 - Pregunta de ObjectContext y herencia personalizada
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; }
}
Ahora puedo crear mi contexto objeto personalizado :
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; }
}
Esto me da el siguiente mensaje de error en realidad bastante descriptiva:
método de ensayo arrojó excepción: System.ArgumentException : Hay no EntitySets definido para el tipo de entidad especificada 'BlogEntry'. Si 'BlogEntry' es un tipo derivado, use el tipo de base en su lugar. Por ejemplo, vería este error si llamó a CreateObjectSet() y DiscontinuedProduct es un tipo de entidad conocido pero no se ha correlacionado directamente con a un EntitySet. El tipo de producto descontinuado puede ser un tipo derivado donde el tipo principal es asignado a EntitySet o el tipo descontinuado puede no ser asignado a un EntitySet en absoluto. Nombre Parámetro: TEntity
Ahora no soy un maestro de la herencia y esas cosas, pero mi forma de ver esto sería añadir un conjunto de entradas y comentarios como ObjectSet < publicación> que resolvería mis problemas?
tiempo Sí No he tenido que mirar más lejos. Lo que dices suena cierto. Acabo de terminar de escribir una gran publicación en el blog sobre mis hallazgos de hoy. Parece que tengo que escribir otro mañana sobre la herencia de POCO :) – mhenrixon
¡Gracias por la sugerencia de quitar el bagage! :) – mhenrixon