2016-02-08 229 views
1
public class A 
{ 
    public int Id { get; set; } 

    public virtual ICollection<AHistory> AHistorys { get; set; } 
} 

public class AHistory 
{ 
    public int AId { get; set; } 

    public virtual A A {get; set; } 
} 

我將AHistories重新安裝到AHistory。EF遷移清除緩存

add-migration HistoMig 

AHistories:的EntityType:EntitySet的 'AHistories' 是基於類型 'AHistory' 不具有定義的鍵。

因此,錯誤提到了解決方案中不再存在的舊名稱。

我該怎麼辦?

我已經清理了沒有任何效果的Visual Studio解決方案。

我也試着註釋掉導航屬性,添加遷移,回滾遷移,取消註釋然後添加遷移;我仍然得到這個錯誤。

我已經通過找到0個字符串的字符串「AHistories」的VS解決方案進行搜索。

+0

如果您使用'AHistories'類型進行遷移,至少應該在您的舊遷移文件中,不是嗎? – Jcl

+1

在我們的上下文中,DbSet屬性的名稱是什麼? – ESG

回答

0

基於ESG評論,我說:

public class DefaultContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new AHistoryMapping()); 

     public DbSet<AHistory> AHistorys { get; set; } 
    } 
} 

public class AHistoryMapping : EntityTypeConfiguration<AHistory> 
{ 
    public AHistoryMapping() 
    { 
     HasKey(ah => ah.AId); 
    } 
} 

它現在!

編輯

其實它不「工作」 ...它編譯,但結果不是我所期待的。

此代碼將創建一個表,其中包含名爲FundId的唯一標識符和名爲Fund_Id的外鍵。

我有我的代碼更改爲

public class AHistoryMapping : EntityTypeConfiguration<AHistory> 
{ 
    public AHistoryMapping() 
    { 
     HasRequired(ah => ah.A) 
     .WithMany(a => a.AHistorys) 
     .HasForeignKey(ah => ah.AId); 
    } 
} 

它不會再編譯。我再次收到消息。

AHistory::EntityType'AHistory'沒有定義鍵。定義此EntityType的關鍵字。 AHistorys:EntityType:EntitySet'AHistorys'基於沒有定義鍵的類型'AHistory'。

編輯2

事實證明,EF需要一個主鍵。這裏是解決方案:

public class AHistoryMapping : EntityTypeConfiguration<AHistory> 
{ 
    public AHistoryMapping() 
    { 
     HasKey(ah => new { ah.AId, Ah.Date }); 
     HasRequired(ah => ah.A) 
     .WithMany(a => a.AHistorys) 
     .HasForeignKey(ah => ah.AId); 
    } 
}