2015-06-08 178 views
0

搜索我有一個表稱爲產品和所謂的產品描述表。 ProductDescription具有一個名爲ProductDescriptionID的主鍵。所以,要獲得產品的描述,我需要訪問這兩個表。實體框架 - 通過ID

這裏是我的代碼來訪問一個產品的描述,但我不知道如何解決它,當我越來越:「lambda表達式無法轉換爲字符串,因爲它不是一個委託類型」。

 productDetailsVM.ProductDescription = db.ProductDescriptions 
      .Where(c => c.ProductDescriptionID.Any(p => p.ProductID == id)) 
      .FirstOrDefault(); 

編輯:

public partial class Product 
    {  
     public int ProductID { get; set; } 
     etc 
    } 

    public partial class ProductDescription 
    { 
     public int ProductDescriptionID { get; set; } 

     public string Description { get; set; } 
    } 

實際上,我怎麼寫這個查詢?

enter image description hereenter image description here

+0

你剛纔不是問同樣的問題在這裏。 http://stackoverflow.com/questions/30699816/how-should-i-write-this-entity-framework-query – deathismyfriend

+0

沒有非常相似,但是不同的問題,第一個得到解決。另外,不同的錯誤。 – user9993

+0

爲什麼不直接從產品開始?假設你對產品的導航性能:'productDetailsVM.ProductDescription = db.Products.Single(P => p.ProductID == ID).ProductDescription;' – DavidG

回答

0

慣於這樣做呢?

productDetailsVM.ProductDescription = db.ProductDescriptions 
      .Where(c => c.ProductID == id) 
      .FirstOrDefault(); 
+0

「不包含」ProductID「的定義」 – user9993

+0

嗯......你可以發佈實體模型嗎?您的企圖有PD有ProductID ... – Mark

+0

需要查看實體之間的關係... – Mark

2

我猜你的數據庫可能是新的,並且仍然在作品中,你還沒有定義的產品和產品描述之間的關係(產品ID中的產品描述表的外鍵)。

一旦你的關係建立,並刷新您的EF圖(你不使用代碼首先假設),你將能夠做到:

var productDescription = db.Product.FirstOrDefault(p=>p.ProductID == id).ProductDescription; 

這假定一個產品只有1個產品描述。

+0

這就是我要回答的問題,根據術語OP需求他的兩個實體之間的導航屬性 –

0

假設您希望產品具有單一描述,您必須將ProductId字段添加到ProductDescription表或ProductDescriptionID字段添加到Product表。 這就是所謂的實體分割,你可以找到這個方法here.

假設你想要一個產品有多個說明和描述多種產品(多對多),你需要一個「橋接表」,只有兩個領域的視頻(產品和描述IDS),符合此橋表的主鍵,這樣你就在你的模型(多對多)關係,再有一個詳細的視頻here.