我是否必须首先使用继承为EF代码实现两次密钥

时间:2011-11-18 12:06:16

标签: c# entity-framework-4.1 ef-code-first data-annotations subclass

我有一个抽象的超类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中吗?

[如果这个问题对你来说似乎很愚蠢,那还是学生很抱歉:)]

1 个答案:

答案 0 :(得分:1)

每个属性只能实现一次(名称在整个层次结构中必须是唯一的)。派生类不应该包含基类的任何属性,除非它们覆盖它们。