0

我目前有一个 MVC5 站点,它与类的 TPH 关系如下:

public abstract class product{
    public int productID {get;set;}
}

public class toy : product {
     public virtual List<ChildComment> Comments {get;set;}
     public virtual List<AdultComment> Comments {get;set;}
}

public class tool : product {
     public virtual List<AdultComment> Comments {get;set;}
}

public class ChildComment {

     public CommentID {get;set;}
     public string commentText {get;set;}

     public virtual product Product {get;set;}
}

public class AdultComment {

         public CommentID {get;set;}
         public string commentText {get;set;}

         public virtual product Product {get;set;}
    }

我的问题是:1)我在成人评论控制器中创建新的成人评论 2)我使用 db.Products.find(id) 将产品添加到评论的产品虚拟属性 3)我转到视图我刚刚添加了评论的产品,发现有 0 条评论(假设我尝试向玩具添加评论,但请记住,当我将其添加到虚拟财产时,我没有将其作为玩具) 4 ) 当我进入数据库时​​,adultcomment 表中有 3 个关键列:一列产品,一列玩具,一列工具。正确的 id 放置在 product 列中,其他为 null

在将产品添加到成人评论的虚拟财产之前,我是否必须将产品转换为玩具或工具?

为什么成人评论表中有额外的列,是否可以合并到一个 id 列(毕竟,我的 tph 中有一个 products 表),如果可能的话我应该这样做吗?

4

1 回答 1

0

将 foreignKey 属性添加到新的 Comment 类

 public class Comment
{
    [Key]
    public int CommentID { get; set; }
    public string commentText { get; set; }
    public int productID { get; set; }

    [ForeignKey("productID")]
    public virtual Product Product { get; set; }
}

所以 AdultComment 现在看起来像这样

public class AdultComment  : Comment
{       

}

尽管数据库自动生成 ID,但您在创建新产品时必须添加唯一标识符

 using (var context = new YOUR-CONTEXT())
 {
      var toy = new Toy
      {
          productID = 1,   //Unique identifier                 
          AdultComments = new List<AdultComment>()
          {
              new AdultComment { commentText = "Some comment" }
          }
       };
       context.Products.Add(toys);
       context.SaveChanges();
   }
于 2015-03-03T22:26:48.797 回答