使用继承的集合导航属性(每种类型的表)

时间:2012-11-17 00:51:18

标签: entity-framework ef-code-first poco navigation-properties

使用实体框架:代码首先,我尝试使用基类的导航属性定义集合导航属性。

对象结构:

public class Content
{
    public int ID { get; set; }
    public ModerationStatuses ModerationStatus { get; set; }
    public ContentItemTypes ContentType { get; set; }
    public virtual User Author { get; set; }
}

public class Image : Content
{
    public Image()
        : base()
    {
        ContentType = ContentItemTypes.Image;
    }
    public string FileName { get; set; }
    public string Location { get; set; }
    public int DisplayOrder { get; set; }
    public long FileSize { get; set; }
}

public class User
{
    public int UserID { get; set; }
    public string Username { get; set; }

    public virtual ICollection<Image> Images { get; set; }
}

Context OnModelCreating:

modelBuilder.Entity<Content>()
    .Map(i => i.ToTable("Content"));

modelBuilder.Entity<Image>()
    .Map(i => i.ToTable("Images"));

生成数据库时,它会在Images表中创建User_UserID外键约束,而不是在Content表中使用Author_UserID。

如何让它将Content..Author_UserID字段识别为ICollection<Image>导航属性的外键?

2 个答案:

答案 0 :(得分:1)

这是不可能的。您需要将Author属性从Content移动到ImageUser类型ICollection<Content> Contents中创建集合}。导航属性必须始终在反向导航属性引用的实体类中声明。它不能从基础实体继承。

答案 1 :(得分:0)

实际上有可能......您只需要在Content类中添加一个导航属性,这样就可以引用映射到。

这是彻底的walkthrough