C# EF 4.1代码优先映射问题
将SitePage的ID映射到数据库列ID(SitePages表,ID列类型为bigint)的所有尝试均失败。它一直在寻找列SitePage\u ID来映射它。。你能看出我哪里做错了吗?所有相关代码如下C# EF 4.1代码优先映射问题,c#,entity-framework,mapping,ef-code-first,entity-framework-4.1,C#,Entity Framework,Mapping,Ef Code First,Entity Framework 4.1,将SitePage的ID映射到数据库列ID(SitePages表,ID列类型为bigint)的所有尝试均失败。它一直在寻找列SitePage\u ID来映射它。。你能看出我哪里做错了吗?所有相关代码如下 public class Site : EntityBase<Int64> { public virtual string Url { get; set; } public virtual IList<SitePage> Pages { get; set;
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");
}
}
公共类站点:EntityBase
{
公共虚拟字符串Url{get;set;}
公共虚拟IList页{get;set;}
}
公共类站点页面:EntityBase
{
公共虚拟站点站点{get;set;}
公共虚拟字符串Url{get;set;}
公共虚拟字符串Html{get;set;}
公共虚拟字符串文本{get;set;}
公共虚拟字符串语言{get;set;}
}
公共抽象类EntityBase:IComparable
{
公共虚拟T ID{get;set;}
受保护的EntityBase():此(默认值(T))
{
}
受保护的EntityBase(T id)
{
this.ID=ID;
if(this.ID==null)
this.ID=默认值(T);
}
}
公共类SpellCrawlerContext:DbContext
{
公共拼写crawlerContext(){}
公共数据库集站点{get;set;}
公共数据库集站点页面{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(s=>s.Pages)
.WithRequired(p=>p.Site)
.Map(s=>s.MapKey(“SiteID”);
modelBuilder.Entity()
.HasKey(p=>p.ID);
modelBuilder.Entity()
.Property(p=>p.ID)
.姓名(“ID”);
}
}
你没有做错任何事。您显示的代码可以正确地执行所有操作。您甚至不需要在SitePage
中明确定义ID
的名称,因为它的定义与ID
类似
默认情况下,
SitePage\u ID
用于为独立关联创建的外键的命名约定。那么,在SitePage
和任何其他实体之间是否存在其他一对多关系?如果您没有在依赖实体中映射外键,则默认情况下它将被定义为SitePage\u ID
。您能否澄清您所期望的表布局?您的代码在SitePages表上生成一个Site\u ID列,但在这两个表上都没有SitePages\u ID列。我使用了您提供的代码,并让EF生成数据库架构。它正确地生成了模式,我没有错误。提供的示例代码中是否缺少任何内容?我没有EF生成表。。我正在连接现有数据库。基本上每个表都有ID列作为主键/标识列。EntityBase上的ID直接映射到每个表的ID列。EF出于某种原因需要一个SitePage_ID列,即使我明确告诉它将SitePage类的ID属性映射到OnModelCreating上的ID列。。我猜我做错了,但我不知道是哪里的原因。谢谢Ladislav,我在SitePage上有公共虚拟IList子页面{get;set;}。。