实体框架6添加连接表的属性

时间:2014-04-02 18:24:19

标签: c# entity-framework e-commerce entity-framework-6

这是场景: 我有一个产品表和一个类别表。这种关系是多对多的:一个类别可以有一个或多个产品......一个产品可以是一个或多个类别......

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 ....有什么办法使用已经存在的表?

1 个答案:

答案 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");
      }
 }