8
Castle.Proxies.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.  

我正在尝试为我的 MVC 5.1 项目设置测试,该项目使用 EntityFramework 6.1 版、AspNet.Identity.Core 2.0 版、AspNet.Identity.EntityFramework 2.0 版。我唯一的测试用例非常简单,一旦我尝试运行,它就会出现上述“IdentityUserLogin”和实体类型“IdentityUserRole”的错误。问题是,据我了解,这两个实体都定义了键!因为它们是由框架提供的。我无法在我的代码第一部分明确看到它们的描述,但在数据库中我可以看到它们都有键。

在我的测试项目中,我使用 Microsoft.VisualStudio.TestTools.UnitTesting 和 Moq(以及 EF 和 Identity Core 库)。

任何帮助或只是指向资源将不胜感激。我找不到任何有类似错误的人。

4

2 回答 2

18

我遇到了同样的问题,最终能够通过创建模拟来运行测试,如下所示:

var mockContext = new Mock<MyDbContext>() { CallBase = true };

据我了解,Mock 否则不会调用基类实现。并且这些键可能会在 - 我猜 - OnModelCreating 的基类实现中定义。

于 2014-04-14T11:30:07.727 回答
0

在实体框架中,实体需要有一个属性(数据库列)定义为主键,看起来你的数据库中没有一个属性(或者 EF 没有正确映射它)。

要手动定义 Key,可以使用Key属性:

class IdentityUserLogin 
{
    [Key]
    public int IdentityUserLoginId { get; set; }
}
于 2014-04-07T10:36:59.637 回答