实体框架流畅的api如何有条件地将多个属性映射到单个表

时间:2015-05-21 18:24:13

标签: c# entity-framework ef-fluent-api

使用流畅的api,如何有条件地将同一数据类型的多个属性映射到单个表。

数据库模型: DB Model

  • ListType将包括分组名称,即过敏原
  • ListItem将包含给定类型的所有可能值
  • ProductListItem包含给定产品的所有“选定”值。

目标是使用ProductListItem表并基于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; }
}

1 个答案:

答案 0 :(得分:0)

我真的不认为你可以通过条件映射实现这一目标,但你可以作弊。

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

或者,您可以选择为具有相同基类的不同ListItem创建单个类,并使用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; }
}

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