2015-05-05 104 views
1

因此,我正在編寫一個電子商務應用程序,並且我試圖在ProductSize類之間創建多對多關係。實體看起來像這樣:在多對多關係中的定製關係表

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal Price { get; set; } 
} 

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

public class ProductSize 
{ 
    public int Id { get; set; } 
    public int ProductId { get; set; } 
    public int SizeId { get; set; } 
    public string Amount { get; set; } 

    public virtual Size Size { get; set; } 
    public virtual Product Product { get; set; } 
} 

通常我不會明確創建這個ProductSize表,因爲EF會爲我創造它。但是,我需要Amount列坐在那裏。現在,爲了獲得有關產品尺寸和數量的信息,我必須創建一個非常明確的查詢(2個連接)。如果我沒有手動創建關係課程,只需要給0123'課程虛擬ICollection,Size,那麼獲取完整信息只是一件簡單的事情。因此,如果我選擇了Product實例,則所有大小都會加載到它的virtual ICollection<Size>中。

問題是 - 我能達到與上面給出的實體結構相同的簡單程度嗎?而不是編寫一個2連接查詢,我明確提到我想要的每一列,然後將它打包到一些ViewModel我希望使用更簡單的語法來獲取Product實例及其相關數據(因此也包含坐在中間表)。

+0

不能添加'Product'和'Size'類上的'虛擬ICollection '? –

回答

1

添加Inverse Navigation PropertyProductSizeProductSize這樣的:

public class Product { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal Price { get; set; } 

    public virtual ICollection<ProductSize> ProductSizes { get; set; } 
} 

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

    public virtual ICollection<ProductSize> ProductSizes { get; set; } 
} 

public class ProductSize { 
    public int Id { get; set; } 
    public int ProductId { get; set; } 
    public int SizeId { get; set; } 
    public string Amount { get; set; } 

    public virtual Size Size { get; set; } 
    public virtual Product Product { get; set; } 
} 

這樣做,你應該能夠在下面的例子中做這樣:

from p in Context.Products 
where p.ProductSizes.Where(ps => ps.Amount > 0 && ps.Size.Name.Equals("Big")).Any() 
select p; 
+0

謝謝,我明天再試,然後接受你的回答。 –