使用实体框架:代码首先,我尝试使用基类的导航属性定义集合导航属性。
对象结构:
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>
导航属性的外键?
答案 0 :(得分:1)
这是不可能的。您需要将Author
属性从Content
移动到Image
类或在User
类型ICollection<Content> Contents
中创建集合}。导航属性必须始终在反向导航属性引用的实体类中声明。它不能从基础实体继承。
答案 1 :(得分:0)
实际上有可能......您只需要在Content类中添加一个导航属性,这样就可以引用映射到。
这是彻底的walkthrough。