2014-04-07 113 views
5
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 &標識核心庫)。

任何幫助或只是指向資源將不勝感激。我找不到有類似錯誤的人。

回答

14

我有同樣的問題,終於能夠通過創建模擬得到的試運行,如下所示:

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

據我所知,Mock否則不會調用基類實現。而這些Keys可能會在基類實現中定義 - 我猜 - OnModelCreating。

+1

太棒了。謝謝。這個CallBase = true是我所需要的。 – bean

0

在實體框架中,實體需要將一個屬性(數據庫列)定義爲主鍵,並且它看起來好像在數據庫中沒有一個(或者EF沒有正確映射它)。

要手動定義一個鍵,就可以使用Key屬性:

class IdentityUserLogin 
{ 
    [Key] 
    public int IdentityUserLoginId { get; set; } 
} 
+0

我相信這是我的問題 - 表已經確定了一個關鍵。你可以在這裏看到http://msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.entityframework.identityuserlogin(v=vs.111).aspx。我的應用程序的其餘部分可以看到這個鍵和那些沒有問題的屬性。 – bean