EF代码首先创建废弃列
本文关键字:废弃 创建 代码 EF | 更新日期: 2023-09-27 18:19:58
我有以下用于数据库的类:
public abstract class BaseProduct
{
public int ID { get; set; }
[Required, StringLength(100), Display(Name = "Name")]
public string ProductName { get; set; }
[Required, StringLength(10000), Display(Name = "Product Description"), DataType(DataType.MultilineText)]
public string Description { get; set; }
public string ImagePath { get; set; }
[Display(Name = "Price")]
public double? UnitPrice { get; set; }
public int? CategoryID { get; set; }
public virtual Category Category { get; set; }
public string Author { get; set; }
public virtual ICollection<PriceRelation> Prices { get; set; }
}
[Table("Packages")]
public class Package : BaseProduct
{
public virtual ICollection<Product> Products { get; set; }
}
[Table("Products")]
public class Product : BaseProduct
{
public virtual ICollection<Package> Packages { get; set; }
}
public class Category
{
[ScaffoldColumn(false)]
public int CategoryId { get; set; }
[Required, StringLength(100), Display(Name = "Name")]
public string CategoryName { get; set; }
[Display(Name = "Category Description")]
public string Description { get; set; }
public int? ParentID { get; set; }
[ForeignKey("ParentID")]
public virtual Category Parent { get; set; }
public virtual ICollection<Category> Children { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
这就是模型构建者:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Package>().HasMany(p => p.Products).WithMany(p => p.Packages)
.Map(m =>
{
m.ToTable("PackageRelations");
m.MapLeftKey("PackageID");
m.MapRightKey("ProductID");
});
}
}
它以以下方式建立了我想要的关系:
表:基本产品列:ID,ProductName,描述,ImagePath,单价,类别ID,作者
表:程序包列:ID
表:产品列:ID,Category_CategoryID
我想知道的是,它为什么在products表中创建列Category_CategoryID?当我填充表时,这一列中的所有值都是null,所以看起来它没有被用于任何事情。
此外,它似乎没有正确的关系,因为该类别上的虚拟产品集合总是空的。
您可能需要将CategoryID重命名为CategoryID,这样EF才能将其识别为Category实体的关键字段。
我想通了!类别中的虚拟ICollection的类型为Product,而实际上它应该是BaseProduct。
当Product只引用该类型时,它将获得一个额外的列来引用Category,这是有道理的。