UnintentionalCodeFirstException |使用Database First使用Effort.Ef6進行實體框架單元測試

c# effort entity-framework entity-framework-6 unit-testing

情況

我想基於實體框架6啟用我的DbContext的單元測試。我已經使用數據庫第一種方法創建了我的DbContext和我的模型,現在有了一個.edmx設計器文件。

問題

我自動創建的DbContext確實覆蓋了DbContext.OnModelCreating方法,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

我試圖根據本文的信息在我的DbContext數據訪問服務中創建我的DbContext的新實例。我的代碼沒有遇到Database.SetInitializer;就像這篇博文的作者所指出的那樣。我的構造函數看起來很像他的。我的DbContext初始化如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

在到達前面提到的重寫的OnModelCreating時會導致異常

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: '上下文在Code First模式下使用,代碼是從EDMX文件生成的,用於Database First或Model First開發。這將無法正常工作。要解決此問題,請不要刪除引發此異常的代碼行。如果您希望使用Database First或Model First,請確保Entity Framework連接字符串包含在啟動項目的app.config或web.config中。如果要創建自己的DbConnection,請確保它是EntityConnection而不是其他類型的DbConnection,並將其傳遞給採用DbConnection的基本DbContext構造函數之一。要了解有關Code First,Database First和Model First的更多信息,請參閱此處的Entity Framework文檔: http//go.microsoft.com/fwlink/?LinkId = 394715 '

有關stackoverflow的大量問題,在使用數據庫優先的apporach時會集中精力進行單元測試,但似乎沒有人像我一樣有類似的問題。

我已經嘗試過做什麼

  • 長時間在互聯網上尋找解決方案。
  • 取消註釋重寫的OnModelCreating()
  • 我已經嘗試過應用此解決方案但沒有成功。
  • 使用Moq模擬我的DbContext ,這絕對不是一個選項。

這個問題

如何創建和使用內存數據庫(努力)?


附加信息

當我取消註釋OnModelCreating() ,在第一次訪問DataContext時將拋出異常。例如:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

System.Data.Entity.ModelConfiguration.ModelValidationException: '在模型生成期間檢測到一個或多個驗證錯誤:MyApplication.Shared.Model.KeyValuePair :: EntityType'KeyValuePair'沒有定義鍵。定義此EntityType的鍵。 KeyValuePairs:EntityType:EntitySet'KeyValuePairs'基於類型'KeyValuePair',沒有定義鍵。

一般承認的答案

問題是我必須為KeyValuePair數據集指定密鑰。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<KeyValuePair>().HasKey(x => x.Key);
    base.OnModelCreating(modelBuilder, null);
}

非常感謝RobertJørgensgaardEngdahl




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因