EF Code First自定义集合

7
在创建 Code First 集合时,您可以实现一个自定义类来实现 ICollection 接口。以下代码仅为概念示例,非实际代码。
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
}
1个回答

7

EF确实支持任何继承自ICollection的集合。我们创建了一个可删除的集合来支持自动删除,还创建了子对象的集合,以保持主对象的尺寸更小。


1
还有一点需要注意。你创建的集合必须具有默认的空构造函数。我们曾试图将 ID 传递给构造函数,结果非常糟糕。我讨厌 ICollection 暴露 Add() 方法,这完全限制了 DDD 设计。 - ScottReynolds
您可以将ICollection属性映射到EF内部,并公开一个公共适配器,以添加自定义行为并不提供Add()。 - Guillaume

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接