我正在使用实体框架,试图测试命中它的代码。所有代码都运行良好,但我在测试时遇到了问题。当我在测试时运行此代码时:
_entities = new Mock<MyEntities>();
Database.SetInitializer(new DropCreateDatabaseAlways<MyEntities>());
_entities.Object.Database.Initialize(true);
我收到“EntityType 没有定义键”错误。我之前得到这些是因为某些表不遵循将其 id 列命名为“ID”或“[Table Name]ID”的约定。清理完这些后,我仍然可以将它们用于具有复合键的表。就 SQL 而言,它们的定义是正确的。在 EDMX 设计器中,当我单击列时,它们说它们是键。那么如何正确地将它们定义为键呢?我把代码放在哪里?
我尝试查找此内容,所有引用都专门针对 Code First 实现。反正我试过了。他们说要覆盖 DbContext 对象的 OnModelCreating 方法并将其添加到其中:
modelBuilder.Entity<Widgets>().HasKey(widget => new { widget.A, widget.B });
所以我做了一个部分类并试图覆盖它。它已经被覆盖了。所以我去了生成的部分类。这是实现:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
所以这是不对的。那我现在该怎么办?
我想在我的 Web 项目中基于 EDMX 生成一个测试数据库,这样我就可以创建适当的集成测试。提前致谢。