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出现。
答案 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);
}
}