Отношение один к одному в каркасной работе сущности Вставка - PullRequest
0 голосов
/ 13 марта 2019

У меня есть 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

Сначала я использую базу данных Entity FrameWork.

Я пытаюсь вставить нового пользователя

 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, но я не знаю, что мне с этим делать.

1 Ответ

1 голос
/ 13 марта 2019

Вы добавляете двух сотрудников с одинаковым UserId в базу данных, и, поскольку UserId является уникальным полем в таблице сотрудников, вы получаете исключение нарушения уникального значения.
В строке item.Employee.Add(c); вы добавляете сотрудника к пользователю, поэтому при добавлении пользователя в базу данных сотрудника добавляется два. Таким образом, вам не нужны последние три строки:

 c.UserID = userID;
 employee.Add(c);
 db.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...