Entity Framework TPH 工厂方法
Entity Framework TPH Factory Method
我目前有一个 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个关键列table:一个是product,一个是toys,一个是tools。正确的id放在product栏,其他都是null
在将产品添加到成人评论的虚拟 属性 之前,我是否必须将其转换为玩具或工具?
为什么成人评论中有额外的列table,是否可以合并到一个id列(因为毕竟我的tph中有一个产品table),并且应该如果可能,我会这样做吗?
将 foreignKey 属性添加到新 Comment class
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();
}
我目前有一个 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个关键列table:一个是product,一个是toys,一个是tools。正确的id放在product栏,其他都是null
在将产品添加到成人评论的虚拟 属性 之前,我是否必须将其转换为玩具或工具?
为什么成人评论中有额外的列table,是否可以合并到一个id列(因为毕竟我的tph中有一个产品table),并且应该如果可能,我会这样做吗?
将 foreignKey 属性添加到新 Comment class
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();
}