首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架TPH工厂方法

实体框架TPH工厂方法
EN

Stack Overflow用户
提问于 2015-03-03 17:27:39
回答 1查看 134关注 0票数 0

我目前有一个与类具有TPH关系的MVC5站点如下所示:

代码语言:javascript
复制
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表),如果可能的话,我应该这样做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-03 22:26:48

将foreignKey属性添加到新的注释类

代码语言:javascript
复制
 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现在看起来像这样

代码语言:javascript
复制
public class AdultComment  : Comment
{       

}

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

代码语言:javascript
复制
 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();
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28838123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档