我試圖將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