1

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

对象结构:

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; }
}

上下文 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>导航属性的外键?

4

2 回答 2

1

这是不可能的。您要么需要将Author属性从Content移到Image类中,要么将集合设为User类型ICollection<Content> Contents。导航属性必须始终在反向导航属性所引用的实体类中声明。它不能从基础实体继承。

于 2012-11-17T22:47:57.660 回答
0

实际上它是可能的......您只需向您的 Content 类添加一个导航属性,以便您可以参考映射到。

这是彻底的演练

于 2013-04-08T02:12:33.540 回答