我有以下模型,没有使用继承:
问题类:
public int QuestionId { get; set; }
public string QuestionTitle { get; set; }
public bool Required { get; set; }
public int questionType { get; set; }
[ScriptIgnore]
public virtual ICollection<TextAnswer> TextAnswers { get; set; }
[ScriptIgnore]
public virtual ICollection<ParagraphAnswer> ParagraphAnswers { get; set; }
[ScriptIgnore]
public virtual ICollection<Choice> Choices { get; set; }
[ScriptIgnore]
public virtual ICollection<ChoiceAnswer> ChoiceAnswers { get; set; }
我应该使用继承来获得答案吗? 也就是说,
TextAnswer : Answer
ParagraphAnswer : Answer
ChoiceAnswer : Answer
这样问题类只有一个ICollection?
你会建议我什么?
答案 0 :(得分:1)
是的,对此进行建模的正确方法是继承。
请注意,您可以选择如何将继承映射到表(TPH,TPT),以及复杂的多级层次结构,您可能需要关注性能。
答案 1 :(得分:0)
是。这就是JAVA中继承的优势。通过这种方法,您将获得良好的代码设计。
您的代码将以更少的代码更改为新的增强和扩展打开,因为只有基类可以扩展到任何新的ANSWER类,并且在问题类中不需要进行任何更改。
答案 2 :(得分:-2)
我对继承和实体框架的经验相当差。在特定情况下(我不想在这里详细说明)EF生成的查询大小就像1Mb一样..(我不是在谈论结果 - 只是查询文本!)
最近(大约6个月)我开始使用NHibernate。在我的公司,我们有一个作为产品开发的软件 - 这意味着每个实体至少有3-4级继承。 NHibernate很好地应对它 - 您可能想尝试一下。
至于EF:不要使用继承。这个项目还不够成熟。
//因为downvotes而编辑: 我从第一个版本开始使用Entity Framework,包括为Visual Studio编写自定义“自定义工具”等硬件,以便从EDMX文件生成代码。自定义生成器添加了对存储过程和正确的延迟加载(在EF 1.0中已被破坏)的支持以及更多。
然后是EF 2.0和巨大的变化。我在几个项目中使用了EF。在其中一个中,我们要求所有实体都有一个基类。这又是一次硬核攻击,这就是发生巨大查询文本的情况。如果你想再次回答我的答案,请再次随意做,但仅仅因为你的情况并不那么复杂(如果我们可以称基类是一个复杂的案例......)并不意味着EF是成熟的和稳定的ORM。