[英]why EF Database.SqlQuery<T> cannot use entity type for partial selection?
我有一個EF的代碼優先類:
public partial class table_test
{
[Key]
public int pKey { get; set; }
[Required(AllowEmptyStrings = true)]
[StringLength(50)]
public string Name { get; set; }
}
和一個DbContext:
public class Test_Context : DbContext
{
public Test_Context()
: base("name=Conn")
{
}
public DbSet<table_test> table_test { get; set; }
}
我想查詢該表中的一些數據:
var items = context.table_test.ToArray();
var items2 = context.Database.SqlQuery<table_test>("SELECT * FROM table_test").ToArray();
var items3 = context.Database.SqlQuery<table_test>("SELECT pKey FROM table_test").ToArray();
然后我得到一個錯誤:
數據讀取器與指定的“ UnitTestProject1.table_test”不兼容。 類型“名稱”的成員在數據讀取器中沒有具有相同名稱的對應列。
什么原因?
正如注釋中的Yamamoto Tetsuya Yamamoto所述,當您僅"SELECT pKey FROM table_test"
因為您只有pKey
,所以無法映射到table_test
類。
我不知道您數據庫的內容,所以我只寫一個一般性的答案更改此內容
"SELECT pKey FROM table_test"
進入
"Select * From table_test"
但通常,您不應該在查詢數據庫時使用“ RAW字符串”在其之上添加抽象層,這樣在您更改DTO中的屬性名稱時,便會更加輕松。
這行產生了異常,因為您只選擇了EF期望table_test
內部的屬性映射定義了兩列的table_test
,即pKey
和Name
:
var items3 = context.Database.SqlQuery<table_test>("SELECT pKey FROM table_test").ToArray();
如果只想選擇pKey
,則只需從現有items2
數組中使用LINQ Select()
(注意:首先using System.Linq;
放置):
var items2 = context.Database.SqlQuery<table_test>("SELECT * FROM table_test").ToArray();
var items3 = items2.Select(x => x.pKey).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.