使用Effort(EF測試工具)和計算列

c#-4.0 database effort entity-framework integration-testing

我有許多直接訪問數據庫的集成測試 - 創建測試先決條件對象 - 執行測試然後清理 - 但是我想在內存中嘗試相同的方法。

我剛剛在我的項目中使用了Effort ,它非常容易。但是我遇到了一個我一直在嘗試的問題 - 但無法解決。

我需要填充虛擬數據的表之一 - 作為測試先決條件 - 包含計算列(nvarchar,非null)。對於測試的範圍,我真的不關心該列的值 - 但即使我嘗試插入虛擬數據,我的數據也會被忽略,然後我遇到錯誤:

"Column 'x' cannot be null. Error code: GenericError"

在我的測試中,我使用的是與實際代碼相同的edmx文件。這可以防止我不斷更新edmx副本。

有沒有辦法可以強制測試更新edmx(在運行時),以便列是可以為空的非計算列? [覆蓋OnModelCreating]還是有辦法插入默認值(此列的任何內容)來阻止此錯誤? [覆蓋SaveChanges]

我目前嘗試過以下方法:

  • 使用.Attach()而不是.Add()附加對象
  • 添加後將EntityState設置為Unchanged
  • 通過Entry.OriginalValues強制值[此值自實體處於已添加狀態]

編輯:

我已經嘗試重寫OnModelCreating方法,但沒有用,因為這是DB-First。

"Column 'x' cannot be null. Error code: GenericError"

熱門答案

在XML編輯器中打開EDMX文件,在StorageModels下找到您的實體,然後添加到列定義StoreGeneratedPattern="Computed"

但是,如果您更新或刪除並添加該表,您將失去此修改。實際上你可以編寫控制台應用程序,它將更新你的edmx文件,並在需要的地方添加StoreGeneratedPattern="Computed" ,你可以將這些應用程序添加到預製工作室中的事件。




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