簡體   English   中英

實體框架4:如何將投影編碼為類類型?

[英]Entity Framework 4: How to code projection to a class type?

如果我有如下課程:

public class Customer {
    public int    id    {get;set;}
    public string name  {get;set;}
    public string line1 {get;set;}
    public string line2 {get;set;}
    public string line3 {get;set;}
    public string line4 {get;set;}
}

我只想選擇ID和Name值,其余的留為null。

var myCustomerList = DC.Customer.Select( 
                     p => new Customer { id = p.id, name = p.name });

我收到以下錯誤:

The entity or complex type 'MyModel.Customer' cannot
be constructed in a LINQ to Entities query.

你還會怎么做? 我是否需要指定所有班級字段?

嘗試這個:

var myCustomerList = from c in DC.Customer 
                     select new { id = p.id, name = p.name };

上面將創建一個Anonymous Type

實際應用:

“ var myCustomerList” <-匿名類型。

具有兩個屬性“ id”和“ name”的匿名類型。 另外,“ var”還允許您創建一個隱式類型的局部變量。 這意味着:

a)您不必聲明/編寫一個僅包含這兩個屬性的類結構即可;

b)您也不需要維護任何一個-您可以更改上述查詢的結構,並且“它確實有效”。

另一個選擇是創建一個CustomerInfo類型:

public class CustomerInfo
{
  public int Id { get; set;}
  public string Name { get; set; }
}

您不能將兩種類型直接映射到EF中的同一表,但是可以輕松地為您的信息類型創建視圖,然后映射到該視圖:

CREATE VIEW vwCustomerInfo AS SELECT Id, Name FROM Customer

然后,將CustomerInfo類型映射到視圖:

public class CustomerInfoMap : EntityConfiguration<CustomerInfo>
{
  public CustomerInfoMap()
  {
    .ToTable("vwCustomerInfo");
  }
}

這樣做的副作用是,EF僅在查詢數據庫時才檢索視圖中的列。 通過ID檢索CustomerInfo時,您將獲得如下所示的SQL:

SELECT ID,名稱來自vwCustomers,ID = 1

此外,只要您的視圖是可更新的,就可以從EF更新CustomerInfo類型,並且基礎表將被更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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