这是场景: 我有一个产品表和一个类别表。这种关系是多对多的:一个类别可以有一个或多个产品......一个产品可以是一个或多个类别......
Code-First映射看起来像这样....
public class Product
{
//...additional properties...
public virtual ICollection<Category> AssociatedCategories {get; set;}
}
public class Category
{
//...additional properties...
public virtual ICollection<Product> AssociatedProducts {get; set;}
}
现在,实体框架将创建一个名为ProductCategory的连接表,其中包含ProductID和CategoryID列。太棒了......
在这里,我需要引入一个排序顺序......基本上只是一个基数定位索引,但这个数字仅存在于产品和类别相互满足的关系中。例如,产品X的排序顺序值可能为&#34; 5&#34;在Y类中,但是某些产品 - X - 在Z类中可能有不同的排序值 - 比如10 - 。
当然,我可以专门为这种类型的东西创建一个实体......但它需要一个新的表...类别ID,产品ID和排序顺序将有3列。我真正希望能够做的是进入实体框架已经制作的表格....它已经在连接表中跟踪产品ID和类别ID ....有什么办法使用已经存在的表?
答案 0 :(得分:2)
您需要为连接表创建一个特定实体才能执行此操作。
public class Product
{
//...additional properties...
public virtual ICollection<ProductCategoryXref> AssociatedCategories {get; set;}
}
public class Category
{
//...additional properties...
public virtual ICollection<ProductCategoryXref> AssociatedProducts {get; set;}
}
public class ProductCategoryXref
{
public int ProductId { get; set; }
public int CategoryId { get; set; }
public int SortOrder { get; set; }
// Additional Columns...
public virtual Product Product { get; set; }
public virtual Category Category { get; set; }
}
如果您使用Fluent API配置实体,它将如下所示:
public class ProductCategoryXrefMap : EntityTypeConfiguration<ProductCategoryXref>
{
ProductCategoryXrefMap()
{
HasKey(pk => new { pk.ProductId, pk.CategoryId });
HasRequired(p => p.Product).WithMany(p => p.AssociatedCategories).HasForeignKey(fk => fk.ProductId);
HasRequired(p => p.Category).WithMany(p => p.AssociatedProducts).HasForeignKey(fk => fk.CategoryId);
ToTable("ProductCategoryXref");
}
}