代码优先映射问题
本文关键字:问题 映射 代码 | 更新日期: 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
。