繁体   English   中英

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

[英]Entity Framework doesn't generate all tables from database

这是我数据库中的图表:

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

    }

并配置它。

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

        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中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM