2011-06-22 72 views
7

在創建代碼第一個集合時,可以實現一個實現ICollection的定製類。下面的代碼是概念上不是實際的EF代碼第一個定製集合

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public Category Category { get; set; } 
} 

public class Category 
{ 
    public int CategoryId { get; set; } 
    public string Name { get; set; } 
    //Want to Avoid This 
    public ICollection<Product> Products { get; set; } 
    //Use his instead of above 
    public ProductList ProductsInCategory {get;set;} 
} 
public class ProductsList :ICollection<Product> 
{ 
    public int DiscontinuedProductsCount 
    { 
     return internalList.Count(); 
    } 
    //Icollection Methods Excluded 
} 
+0

你試過了嗎? –

回答

7

EF確實可以支持從ICollection繼承的任何集合。我們創建一個可刪除的集合來支持自動刪除,並且還爲子對象創建集合,以使主對象的大小更小。

+1

Theres也是一個大問題。你創建的集合必須有一個默認的空構造函數。我們試圖將ID傳遞給構造函數,這非常糟糕。我討厭ICollection公開Add()。它完全限制了DDD設計。 – ScottReynolds

+0

您可以將ICollection屬性映射到EF內部,並公開一個添加自定義行爲並且不提供Add()的公共適配器。 – Guillaume