我目前有一个与类具有TPH关系的MVC5站点如下所示:
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)当我进入数据库时,成人评论表中有三个关键列:一个用于产品,一个用于玩具,另一个用于工具。正确的id被放置在“产品”列中,其他的为空。
在将产品添加到成人评论的虚拟财产之前,我是否必须将产品转换为玩具或工具?
为什么成人评论表中有额外的列,是否可以合并成一个id列(毕竟,我的tph中有一个products表),如果可能的话,我应该这样做吗?
发布于 2015-03-03 22:26:48
将foreignKey属性添加到新的注释类
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();
}https://stackoverflow.com/questions/28838123
复制相似问题