簡體   English   中英

為什么選擇EF Database.SqlQuery <T> 不能使用實體類型進行部分選擇?

[英]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”不兼容。 類型“名稱”的成員在數據讀取器中沒有具有相同名稱的對應列。

具有實體類型的EF Database.SqlQuery

什么原因?

正如注釋中的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 ,即pKeyName

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM