繁体   English   中英

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

[英]Entity Framework 6 Adding properties to join tables

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

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在类别Y中可能具有排序顺序值“5”,但是某些产品 - X - 在类别Z中可能具有不同的排序值(例如10)。

当然,我可以专门为这种类型的东西创建一个实体......但它需要一个新的表...类别ID,产品ID和排序顺序将有3列。 我真正希望能够做的是进入实体框架已经制作的表格......它已经在连接表中跟踪产品ID和类别ID ....有什么方法可以做使用已经存在的表?

您需要为连接表创建特定实体才能执行此操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM