簡體   English   中英

Asp.Net MVC C#其他信息:實體或復雜類型不能在LINQ to Entities查詢中構造

[英]Asp.Net MVC C# Additional information: The entity or complex type cannot be constructed in a LINQ to Entities query

我收到此錯誤: The entity or complex type 'ebs.Models.ExtraItemVM' cannot be constructed in a LINQ to Entities query. 在這條線上:

 booking.ExtraItemsVM = extralist.ToList(); 

我看過其他示例,它說如果您嘗試映射到實際的數據庫表,則會出現此錯誤。

就我而言,我試圖映射到ViewModel。

我的控制器代碼如下。

首先從數據庫中獲取“附加”列表:

 // get a list of extras
 var extralist = db.Extras.Where(x => x.hotel_id == AccID)
    .Select(e => new ExtraItemVM
     {
      eID = e.additem_id,
      Description = e.additem_text,
      Price = e.additem_cost,
      Count = 0
     });

然后創建一個新的“ booking”視圖模型,並嘗試將其他列表附加到Booking.ExtraItemsVM屬性失敗:

 Booking booking = new Booking();
 booking.ExtraItemsVM = extralist.ToList();        

*的ViewModels

 public class Booking
 {
    public int ID { get; set; }
    public bool HasResults { get; set; }
    public List<ExtraItemVM> ExtraItemsVM { get; set; }
  ...
  ...
 }

public class ExtraItemVM
{
    public int ID { get; set; }
    public long eID { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public int Count { get; set; }
}

數據庫模型

public class Extra
{
    [Key]
    [Display(Name = "ID")]
    public long additem_id { get; set; }
    public long hotel_id { get; set; }
    public string additem_text { get; set; }
    public decimal additem_cost { get; set; }
 }

我不認為我正在映射到數據庫表-所以任何人都可以幫助顯示我做錯了什么嗎?

謝謝,

標記

我沒有足夠的信息來重復這個問題,但是我有一種嚴重的感覺,那就是下面的代碼部分。

var extralist = db.Extras.Where(x => x.hotel_id == AccID)
   .Select(e => new ExtraItemVM
    {
     eID = e.additem_id,
     Description = e.additem_text,
     Price = e.additem_cost,
     Count = 0
    });

調試此問題的最簡單方法可能是消除Select子句或Where子句,然后查看是否可以消除您的問題。 您總是可以分幾步來完成此操作,而不是一口氣嘗試一下。

在這種情況下,我們需要更多信息才能真正找到根本原因。 我將嘗試調試的前兩件事是。

1)驗證查詢(where子句)沒有引起任何問題。 為此,您需要在構建虛擬機之前強制L2E運行查詢

var extralist = db.Extras.Where(x => x.hotel_id == AccID)
                  .AsEnumerable()  //This will force L2E to execute the query
                  .Select(e => new ExtraItemVM
                         {
                              eID = e.additem_id,
                              Description = e.additem_text,
                              Price = e.additem_cost,
                              Count = 0
                         });

2)第二種選擇是刪除VM類並使用匿名類。

var extralist = db.Extras.Where(x => x.hotel_id == AccID)
                  .Select(e => new ()
                         {
                              eID = e.additem_id,
                              Description = e.additem_text,
                              Price = e.additem_cost,
                              Count = 0
                         })
                  .AsEnumerable();

如果第二個選項有效,則您的VM不適用於L2E。 為了在Select語句中構建類,您必須使用具有默認構造函數的類(就像示例代碼中一樣)。 一個可以解釋很多問題的好問題是: 不能在LINQ to Entities查詢中構造實體

暫無
暫無

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

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