【问题标题】:How to insert data to a relationship table in EF Core如何将数据插入 EF Core 中的关系表
【发布时间】:2020-07-01 13:09:42
【问题描述】:

我这里有两个表(教师和用户)。表用户与表教师有关系。这些是图片 Table Teacher, Table User.


我需要制作一个管理教师表格。因此,每次我向表教师插入数据时,它也必须将数据插入表用户。根据我的经验,我可以将数据插入到表 Teacher 中,但我不能将数据插入到表 User 中。

这是错误:更新条目时出错。看 细节的内部例外” [重复]

SqlException:INSERT 语句与 FOREIGN KEY 冲突 约束“FK_User_Student”。数据库发生冲突 “LKSN2017”,表“dbo.Student”,列“StudentId”。该声明有 被终止了。

我为此使用 Entity Framework Core Linq。这是语法的示例:

db.Teachers.Add(insert);

这是我将数据插入表教师和用户的代码。性别和密码生成的变量是字符串。它没有问题,所以不要关心变量。

Teacher insert = new Teacher()
{
  TeacherId = textboxTeacherID.Text.ToString(),
  Name = textboxTeacherName.Text.ToString(),
  Address = textboxAddress.Text.ToString(),
  Gender = gender,
  DateofBirth = Convert.ToDateTime(datepickerDateOfBirth.Text.ToString()),
  PhoneNumber = textboxPhoneNumber.Text.ToString()
};                                      
db.Teachers.Add(insert);

User insertMore = new User()
{
  username = textboxTeacherID.Text.ToString(),
  password = passwordGenerate
};                                    
db.Users.Add(insertMore);
db.SaveChanges();
   

好的,实际上我还有一个名为管理学生表单的表单。它与管理教师具有相同的任务。每次我在Student表中插入数据时,也需要向User表中插入数据。

这是表 Student 和 Table User 的图像: Table StudentTable User

所以,如果我能完成管理教师表格,我也可以完成管理学生表格

请帮助我使用 Entity Framework Core Linq。如果您不知道如何使用 Entity Framework Core Linq 修复它,你们可以提供 MySql 方法或技术名称来解决此问题。所以,我可以在浏览器中搜索它。非常感谢!

【问题讨论】:

  • 请添加您的教师和用户实体和代码如何创建insert
  • 您使用的是 SQL 还是 MySQL?请参阅我昨天发布的答案:stackoverflow.com/questions/62663042/… 该行显示了如何添加约束和引用。
  • @jdweng,我使用 Entity Framework Core Linq。语法示例是:db.Teachers.Add(insert)。但是,如果你只知道用 MySql 修复它的方法。没关系,因为我对 MySql 有一些了解。我的意思是 MySql 就像 ("Select * from teacher;")。
  • 我喜欢使用 SQL Server Management Studio 中的查询来创建 SQL 数据库,就像我在链接中显示的那样。然后当您遇到问题时,您可以删除现有数据库并从文本文件创建新数据库。
  • @GuruStron 我已经上传了我的代码。你现在可以检查了

标签: c# sql-server entity-framework-core


【解决方案1】:

我认为您需要将教师和用户的关系设置为 1-1 EF 中的示例

    public class Teacher
    {
        [ForeignKey("User")]
        public int UserId { get; set; }

        .............
        public virtual User User { get; set; }
    }

    public class User
    {
        [Key]
        public int Id { get; set; }

        ..............

        public virtual Teacher Teacher { get; set; }
    }

以及插入新老师的示例

var newTeacher = new Teacher()
{
    // other property
    User = new User()
    {
        //other property
    }
}
db.Teachers.Add(newTeacher);

别忘了放主键。

【讨论】:

  • 只有一个错误“Invalid initializer member declarator”
  • 如果我使用 User = new User(){},它会给我一个错误:“教师”不包含“用户”的定义。但是,如果我使用 Users = new User(),则会出现错误:无法将类型“LKS_2017.User”隐式转换为“System.Collections.Generic.ICollection”。存在显式转换(您是否缺少演员表?)
  • 你可以查看这个帖子,它可能对你有帮助stackoverflow.com/questions/5957515/…
  • 因为在此之前您需要建立一对一的关系
  • 嗯,我不知道这是错还是错。但是,我的用户表有两个关系。第一个是表Student (studentId) 作为primaryKey。第二个是表教师(teacherId)作为primaryKey。对于外键,它来自表User(用户名)作为primaryKey。我们是否也需要将外键从用户名更改为用户ID?我试过了,但它说“选择与相关列具有相同数据类型属性的列”
猜你喜欢
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
相关资源
最近更新 更多