我创建了一个viewmodel,它具有对实体类型的引用。
这是我的viewmodel:
namespace SuperMart.Areas.Admin.ViewModels
{
[NotMapped]
public class ProductDetailVM
{
public int ProductID { get; set; }
[Display(Name = "Name")]
public string ProductName { get; set; }
[Display(Name = "Price")]
public double Price { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
[Display(Name = "Sub Category")]
public string SubCat { get; set; }
[Display(Name = "Category")]
public string Category { get; set; }
[Display(Name = "Status")]
public bool Available { get; set; }
[Display(Name = "Date Created")]
public DateTime? DateCreated { get; set; }
public virtual ICollection<ProductImages> ProductImages { get; set; }
}
}
viewmodel引用的实体类型:
namespace SuperMart.Entities
{
public class ProductImages
{
[Key]
public int ImageID { get; set; }
public byte[] ImageContent { get; set; }
public string ImageContentType { get; set; }
public string ImageName { get; set; }
public FileType FileType { get; set; }
[ForeignKey("Product")]
public int ProductID { get; set; }
public virtual Product Product { get; set; }
}
}
我用[NotMapped]
属性标记了类,说我不希望它成为数据库表,因为它只是一个视图模型而不是实体类型。但是,当我运行add-migration命令然后导致外键冲突时,EF仍在尝试将其创建为表。我尝试了modelBuilder.Ignore
,但是单向或其他EF似乎忽略了该代码,因为它仍然将表创建为一个表,如下所示。
public override void Up()
{
CreateTable(
"dbo.ProductDetailVMs",
c => new
{
ProductID = c.Int(nullable: false, identity: true),
ProductName = c.String(),
Price = c.Double(nullable: false),
Description = c.String(),
SubCat = c.String(),
Category = c.String(),
Available = c.Boolean(nullable: false),
DateCreated = c.DateTime(),
})
.PrimaryKey(t => t.ProductID);
AddForeignKey("dbo.ProductImages", "ProductID", "dbo.ProductDetailVMs", "ProductID", cascadeDelete: true);
}
答案 0 :(得分:1)
通常,要映射实体,您需要在DbContext中包含DbSet属性。 - Martin Liversage
好吧,事实证明我有点自己在腿上。我发现该类存在于我的DbContext类中,因此映射存在问题。但我必须承认,我真的不知道它是怎么到那里的。无论如何问题已经解决了。