我在上一个问题上进一步展开了.假设我从Post继承了BlogEntry和Comment.我现在想要自定义它们.对博客文章的评论不需要标题,但评论需要用户参考,所以我将这两个字段从Post移到评论和博客条目中,如下所示:
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; }
}
Run Code Online (Sandbox Code Playgroud)
现在我创建自定义对象上下文:
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; }
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下实际上非常具有描述性的错误消息:
测试方法引发异常:System.ArgumentException:没有为指定的实体类型"BlogEntry"定义EntitySet.如果'BlogEntry'是派生类型,请改用基类型.例如,如果调用CreateObjectSet()并且DiscontinuedProduct是已知实体类型但未直接映射到EntitySet,则会看到此错误.DiscontinuedProduct类型可以是派生类型,其中父类型映射到EntitySet,或者DiscontinuedProduct类型可能根本不映射到EntitySet.参数名称:TEntity
现在我不是继承和东西的主人,但我看到的方式是添加一组条目和注释作为ObjectSet <Post>来解决我的问题?
Ale*_*mes 11
如果ObjectSet为基类型创建(即Post),则也无法为派生类型创建一个,因为您可以从该类继承层次结构中检索所有类型的实例ObjectSet.
ie ctx.Posts.OfType<BlogEntry>()将返回BlogEntry(s).
所以答案是简单地删除另外两组.
如果你需要做一个添加例如你可以这样做:
ctx.Posts.AddObject(new BlogEntry {....});
Run Code Online (Sandbox Code Playgroud)
完全没问题.
为了帮助您更轻松地编写查询,您可以在ObjectContext中添加几个属性,如下所示:
public ObjectQuery<BlogEntity> Blogs{
get{
return ctx.Posts.OfType<BlogEntry>() as ObjectQuery<BlogEntry>;
}
}
Run Code Online (Sandbox Code Playgroud)
和评论相同.
希望这可以帮助
亚历克斯
| 归档时间: |
|
| 查看次数: |
5219 次 |
| 最近记录: |