我尝试将SitePage的ID映射到数据库列ID(SitePages表,bigint类型的ID列)的尝试都失败了。它一直在寻找列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");
}
}
答案 0 :(得分:1)
你没有做错任何事。您显示的代码正确完成所有操作。您甚至无需在ID
中明确定义SitePage
的名称,因为无论如何它都会定义为ID
。
SitePage_ID
。那么SitePage
和任何其他实体之间是否存在任何其他一对多关系?如果您未在依赖实体中映射外键,则默认情况下将其定义为SitePage_ID
。