我试图将SitePage的ID映射到数据库列ID(SitePages表,大写字母的ID列)失败。它不断寻找专栏SitePage_ID来映射它..你能看到我在做什么错了吗?所有相关的代码如下所示;EF 4.1代码优先映射问题
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");
}
}
你能澄清你期望的表格布局吗?您在SitePages表上生成Site_ID列的代码,但在任一表上没有SitePage_ID列。 – Josh 2011-04-29 19:47:56
我使用了您提供的代码并让EF生成数据库模式。它正确地生成了模式,我没有错误。在提供的示例代码中是否有任何缺失? – 2011-04-29 20:14:11
我没有EF生成表..我正在连接到现有的数据库。基本上每个表都有ID列作为主键/标识列。 EntitiyBase上的ID直接映射到每个表的ID列。 EF由于某种原因期望一个SitePage_ID列事件,尽管我明确告诉它将SitePage类的ID属性映射到OnModelCreating上的ID列。我想我做错了,但我不知道在哪里 – kaivalya 2011-04-29 22:07:38