將類映射到存儲過程結果集“值不能為null。參數名稱:entityType”

entity-framework-core

我正在使用Entity Framework 7 RC1 Code First

我有以下代碼

var resultset = await _db.Employees.FromSql<Employee>("dbo.sp_GetEmployees @DeptId="+ deptId).ToListAsync();

這適用於正確獲取數據。

但是我需要更改存儲過程以包含除員工返回之外的其他屬性。

因此,我調整存儲過程並創建一個自定義類EmployeeQuery ,該類繼承自Employee並具有其他屬性。

但是,FromSql是我的DBContextDbSet上的一個方法

 public DbSet<Employee> Employees{ get; set; }

所以我可以通過創建為EmployeeQuery做同樣的事情

 public DbSet<EmployeeQuery> EmployeeQueryItems{ get; set; }

和var resultset = await _db.EmployeeQueryItems.FromSql(“dbo.sp_GetEmployees @DeptId =”+ deptId).ToListAsync();

但是創建一個DBSet屬性,這告訴實體框架在數據庫中創建表,它只是一個查詢對象。所以我不想做上述事情。

但是顯然你可以使用github和本答案中提到的DbContext Set方法

所以我將我的代碼更改為var resultset = await _db.Set()。FromSql(“dbo.sp_GetEmployees @DeptId =”+ deptId).ToListAsync();

但是這給了我一個運行時錯誤

ex = {“Value不能為null。\ r \ nParameter name:entityType”}

我該如何解決這個問題?

從這個gitbub問題看 ,如果沒有創建一個虛擬表,它似乎是不可能的。

有沒有辦法告訴EF不創建表?就像NotMapped上的DbSet屬性DbSet

熱門答案

我自己遇到了這個問題,我能夠解決問題的唯一方法就是為POCO映射一個密鑰。

在生成的上下文旁邊的部分類中,我重寫OnModelCreating並添加:

modelBuilder.Entity<ClassName>(entity => entity.HasKey(e => e.Id));

似乎滿足EntityFramework。



Related

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