2016-02-08 3 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; } 
} 

Я переименовал Аисторию в Аисторию.EF Миграция Clear Cache

add-migration HistoMig 

AHistories: EntityType: EntitySet 'AHistories' основан на типе 'AHistory', который не имеет ключи, определенные.

Таким образом, ошибка упоминает старое имя, которое больше не существует в решении.

Что мне делать?

Я уже очистил решение Visual Studio без эффектов.

Я также попытался прокомментировать свойство навигации, добавить миграцию, откат миграции, раскомментировать, а затем добавить миграцию; Я все еще получаю этот эррос.

Я выполнил поиск по VS решению на String «AHistories» с обнаружением 0.

+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', который не имеет определенных ключей.

Edit 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); 
    } 
}