0

我有一个抽象类和其他继承自它的类。

这些课程如下:

[Table("Contents", Schema="Admon")]
    public abstract class Content
    {
        public Content()
        {
            this.EntryDate = DateTime.Now;
        }
        [Key]
        public int ID { get; set; }
        public string Title { get; set; }
        public int? ParentID { get; set; }
        [StringLength(15)]
        public string InfoType { get; set; }
        public DateTime EntryDate { get; set; }
        public string Preview { get; set; }
        public string Description { get; set; }
        public string Link { get; set; }
        public string Text { get; set; }
        public string CategoryID { get; set; }
        public int? DocID { get; set; }

        public virtual Content Parent { get; set; }
        public virtual ICollection<Content> Subs { get; set; }
    }

    public class Photo : Content { }
    public class Notice : Content { }
    public class Article : Content { }
    public class Calendar : Content { }

我的问题是,每当我运行我的应用程序时,它都会抛出一个异常,内容为

System.MissingMethodException: Cannot create an abstract class

我能做些什么来纠正这个错误。

提前致谢

4

3 回答 3

1

要在实体框架中使用继承,您必须实现 TPH(每个层次结构的表)或 TPT(每个类型的表)数据库结构。

使用此策略,您将能够实现预期的行为。你可以按照这篇文章来实现TPH或者TPT,了解一下这个技术。

希望能帮助到你 !

于 2013-09-02T14:45:05.610 回答
0

您不能创建抽象类的实例。抽象类包含定义子类应该包含什么的抽象成员。

如果这个类必须保持抽象,您需要创建第二个类,从它继承并实现它的成员,并使用该类进行处理。

如果类不必保持抽象(我不明白为什么它应该是,但没有看到你的代码的其余部分,我不能 100% 确定),那么只需删除 abstract 关键字。

于 2013-09-02T14:38:23.810 回答
0

Content不会编译,因为您的类是abstract。MVC 引擎不能直接创建 Content 的实例。除非你给它一些方法来知道要实例化哪种类型的 Problem,否则它什么也做不了。可以创建自己的 ModelBinder 实现,并告诉 MVC 使用它。例如,您的实现可以绑定到依赖注入框架,以便它知道在请求Content类时创建Content1 。

于 2013-09-02T15:59:29.567 回答