实体框架中的一对一关系插入

我有 2 个表,用户和员工


CREATE TABLE [dbo].[Users](

 [UserID] [int] IDENTITY NOT NULL,

 [Username] [nvarchar](8) NOT NULL,

 [Activo] [bit] NOT NULL,

 [UltimoAcesso] [datetime] NULL,


 PRIMARY KEY (UserID)

)


CREATE TABLE [dbo].[Employees](

    [ColaboradorID] [int] IDENTITY(1,1) NOT NULL,

    [Nome] [nvarchar](100) NOT NULL,

    [Email] [nvarchar](100) NULL,

    [UserID] [int] NULL


    PRIMARY KEY(ColaboradorID),

    UNIQUE (UserID)

)


ALTER TABLE [dbo].[Employees]  WITH CHECK ADD  CONSTRAINT [FK_Employees_UtilizadorID] FOREIGN KEY([UserID])

REFERENCES [dbo].[Users] ([UserID])

ON UPDATE CASCADE

ON DELETE CASCADE

我首先使用实体框架数据库。


我正在尝试插入一个新用户


 public void fvAddUser_InsertItem()

        {

            var item = new InventarioCiclico.Users();

            using (InventarioCiclicoContext db = new InventarioCiclicoContext())

            {

                Employee c = new Employee ();


            c.Nome = (fvAddUser.FindControl("txtNome") as TextBox).Text;

            c.Email = (fvAddUser.FindControl("txtEmail") as TextBox).Text;

            item.Employee.Add(c);


            var employee = db.Set<Employee>();


            TryUpdateModel(item);


            if (ModelState.IsValid)

            {

                if (db.Users.Any(u => u.Username == item.Username))

                {

                    // Handle exception

                }

                else

                {

                    db.Users.Add(item);

                     db.SaveChanges();

                     var userID = item.UserID;

                    c.UserID = userID;

                    employee.Add(c);

                    db.SaveChanges();

                }                    

            }

        }

    }

但是它一直给我违反独特价值的例外?在开始使用实体框架之前,我会先在 Users 表上插入,然后获取 scope_identity 并在 Employee 表上插入,然后我正在尝试使用 EF6 来执行此操作,但我不知道该怎么做。


婷婷同学_
浏览 111回答 1
1回答

动漫人物

您要UserId在数据库中添加两个相同的员工,并且由于UserId是员工表中的唯一字段,因此您会遇到违反唯一值的异常。在item.Employee.Add(c);您将员工添加到用户的行中,因此,当将用户添加到数据库时,员工将被添加两个。所以你不需要最后三行:&nbsp;c.UserID = userID;&nbsp;employee.Add(c);&nbsp;db.SaveChanges();
打开App,查看更多内容
随时随地看视频慕课网APP