Entity Framework 流利 api 如何有条件地将多个属性映射到单个 table

Entity Framework fluent api how to conditionally map multiple properties to a single table

使用 Fluent api,如何有条件地将相同数据类型的多个属性映射到单个 table。

数据库模型:

目标是使用 ProductListItem table 并将其应用于基于 ListType (WHERE ProductListItem.ListTypeID = 1) 的模型(相同 ProductListItem 类型)的多个属性。

public class Product
{
    public int ProductID { get; set; }
    public List<ProductListItem> Allergens { get; set; }
    public List<ProductListItem> DoesNotContain { get; set; }
}

我真的不认为你可以用条件映射来实现这个,但你可以作弊。

 public List<ProductListItem> Allergens 
 { 
    get { return this.ProductListItems.Where(i => i.ListType.Name=="Allergens").ToList=();}
 }

或者您可以选择为具有相同基数class 的不同列表项创建单个 class 并使用 TPH 映射:http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph

代码应该是这样的:

class Product
{
  public List<AllergenProductListItem> Allergens { get; set; }
  public List<DoesNotContainListItem> DoesNotContain { get; set; }
}

关于项目类型的数量显然不是动态的(很难添加新类型),但这也不是您想要的解决方案,因为如果您想要一个新类型,您应该修改代码。