代码优先映射问题

本文关键字:问题 映射 代码 | 更新日期: 2023-09-27 17:54:21

将SitePage的ID映射到数据库列ID (SitePage表,ID列的类型为bigint)的所有尝试都失败了。它一直在寻找列SitePage_ID来映射它。你能看出我哪里做错了吗?所有相关代码如下;

public class Site : EntityBase<Int64>
{
    public virtual string Url { get; set; }
    public virtual IList<SitePage> Pages { get; set; }
}
public class SitePage : EntityBase<Int64>
{
    public virtual Site Site { get; set; }
    public virtual string Url { get; set; }
    public virtual string Html { get; set; }
    public virtual string Text { get; set; }
    public virtual string Language { get; set; }
}
public abstract class EntityBase<T> : IComparable
{
    public virtual T ID { get; set; }
    protected EntityBase() : this(default(T)) 
    { 
    }
    protected EntityBase(T id)
    {
        this.ID = id;
        if (this.ID == null)
            this.ID = default(T);
    }
}
public class SpellCrawlerContext : DbContext
{
    public SpellCrawlerContext(){}
    public DbSet<Site> Sites { get; set; }
    public DbSet<SitePage> SitePages { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Site>()
            .HasMany(s => s.Pages)
            .WithRequired(p => p.Site)
            .Map(s => s.MapKey("SiteID"));
        modelBuilder.Entity<SitePage>()
            .HasKey(p => p.ID);
        modelBuilder.Entity<SitePage>()
            .Property(p => p.ID)
            .HasColumnName("ID");
    }
}

代码优先映射问题

你没有做错任何事。您所展示的代码可以正确地完成所有操作。您甚至不需要在SitePage中显式定义ID的名称,因为它将像ID一样被定义。

SitePage_ID默认命名约定用于为独立关联创建的外键。那么在SitePage和其他实体之间还有其他的一对多关系吗?如果您没有在依赖实体中映射外键,则默认定义为SitePage_ID