我有一个抽象的超类DataContent:
public abstract class DataContent
{
[Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Sheet")] //Foreign Key van Sheet
public int SheetId { get; set; }
public string Name { get; set; }
public DataContent(int i, string n)
{
Id = i;
Name = n;
}
和3个子类,例如EmptyContent:
public class EmptyContent: DataContent
{
//TODO: Do these keys have to be here as well???
[Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Sheet")] //Foreign Key van Sheet
public int SheetId { get; set; }
public string Name { get; set; }
public string Text { get; set; }
public EmptyContent (int i, string n) : base(i,n)
{
Text = "";
}
}
我的问题是:我是否必须为实体框架两次声明(外部)密钥才能生成数据库?或者我可以只将它们放在超类Datacontent中吗?
[如果这个问题对你来说似乎很愚蠢,那还是学生很抱歉:)]
答案 0 :(得分:1)
每个属性只能实现一次(名称在整个层次结构中必须是唯一的)。派生类不应该包含基类的任何属性,除非它们覆盖它们。