EF迁移清除缓存

时间:2016-02-08 11:30:26

标签: entity-framework visual-studio

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。

add-migration HistoMig
  

AHistories:EntityType:EntitySet&#39; AHistories&#39;是基于类型&#39; AHistory&#39;没有定义键。

因此,错误提到了解决方案中不再存在的旧名称。

我该怎么办?

我已经清理过没有效果的Visual Studio解决方案。

我还尝试注释掉导航属性,添加迁移,回滚迁移,取消注释然后添加迁移;我仍然得到这个错误。

我已经在String&#34; AHistories&#34;上完成了对VS解决方案的搜索。发现0出现。

1 个答案:

答案 0 :(得分: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);
    }
}

现在有效!

修改

实际上它没有&#34;工作&#34; ...它编译但结果不是我所期待的。

此代码创建一个表,其中包含名为FundId的唯一标识符和名为Fund_Id的外键。

我已将代码更改为

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

它不再编译。我再次收到消息。

  

AHistory :: EntityType&#39; AHistory&#39;没有定义键。定义此EntityType的键。   AHistorys:EntityType:EntitySet&#39; AHistorys&#39;是基于类型&#39; AHistory&#39;没有定义键。

修改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);
    }
}