Entity Framework 流利 api 如何有条件地将多个属性映射到单个 table
Entity Framework fluent api how to conditionally map multiple properties to a single table
使用 Fluent api,如何有条件地将相同数据类型的多个属性映射到单个 table。
数据库模型:
- ListType 将包括分组名称,即过敏原
- ListItem 将包含给定类型的所有可能值
- ProductListItem 包含给定产品的所有 "selected" 个值。
目标是使用 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; }
}
关于项目类型的数量显然不是动态的(很难添加新类型),但这也不是您想要的解决方案,因为如果您想要一个新类型,您应该修改代码。
使用 Fluent api,如何有条件地将相同数据类型的多个属性映射到单个 table。
数据库模型:
- ListType 将包括分组名称,即过敏原
- ListItem 将包含给定类型的所有可能值
- ProductListItem 包含给定产品的所有 "selected" 个值。
目标是使用 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; }
}
关于项目类型的数量显然不是动态的(很难添加新类型),但这也不是您想要的解决方案,因为如果您想要一个新类型,您应该修改代码。