实体框架不会从数据库生成所有表

时间:2019-09-01 09:20:42

标签: c# entity-framework

这是我数据库中的图表:

enter image description here

但是当我使用实体框架时,就像这样:

enter image description here

它没有表名ListSuiteQuestion,但是在类QuestionSuite中有2个新属性:

enter image description here

2 个答案:

答案 0 :(得分:0)

ListSuiteQuestion由sql自动创建,因为在sql中没有名为many to many relationship (m:n)的东西,sql创建了另一个表来实现m:n与包含主键的键的关系两个关系表的名称也是两个关系表的名称的组合的名称。 在您的实体框架内,通过另一个表访问每个表,您就可以访问该表,因此无需通过实体框架对其进行定义。但是,如果您打算自定义字段或将字段添加到第三张表中,则可以手动将其构建到代码中,然后显示它的实体框架,尽管您不需要这样做。

如果要在代码中手动创建,请执行以下操作:

 public class Suite
    {
        //another property
        public int IdSuite { get; set; }
        public virtual ICollection<SuitQuestions> Questions { get; set; }
    }
    public class Question
    {
        //another property
        public int IdQuestion { get; set; }
        public virtual ICollection<SuitQuestions> Suites { get; set; }
    }
    public class SuiteQuestions
    {
        public Suite Suite { get; set; }
        public int IdSuite { get; set; }
        public  Question Question { get; set; }
        public int IdQuestion { get; set; }

        //add custome property if you need

    }

并配置它。

答案 1 :(得分:0)

是正确的。一个问题有一个套房列表,而一个套房有一个问题列表。 如果您这样做:

        var suite = context.Suites.Find(5);
        var question = context.Questions.Find(30);
        suite.Questions.Add(question);
        // And update this suite object here;

您将在ListSuiteQuestion表中看到一个新记录,其中IdSuite = 5并且IdQuestion =30。不需要创建类ListSuiteQuestion。 但是,如果您确实要创建类,则必须将ID作为主键添加到Table ListSuiteQuestion中。