C # реляционная база данных - PullRequest
2 голосов
/ 28 апреля 2019

У меня есть реляционная таблица, где есть связь между пользователями и заметками. Моя проблема

  1. _result.Entity.Id возвращает -2147482647

  2. Я использую электронную почту в качестве ключа, но при создании более одной заметки возникает ошибка, указывающая, что у меня уже есть такая электронная почта в базе данных, я хотел бы услышать решение этой проблемы.

  3. Моя задача - сопоставить примечания Id в двух таблицах, но в таблице связи идентификатор равен (см. 1)

[HttpPost]
public async Task<IActionResult> Create(AddToDoViewModel model)
{
    if (ModelState.IsValid)
    {
        ToDo toDo = new ToDo {Name = model.Tittle, Body = model.Body };
        var _result = await db.ToDos.AddAsync(toDo);

        UserToDo userToDo = new UserToDo { ToDoId = _result.Entity.Id, UserEmail = User.Identity.Name};
        var result = await db.UserToDos.AddAsync(userToDo);

        db.SaveChanges();

        return Redirect("/Profile");
    }

    return View(model);
}

public class ToDo
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Body { get; set; }
}

public class UserToDo
{
    [Key]
    public string UserEmail { get; set; }
    public int ToDoId { get; set; }
}

Буду очень признателен за любую помощь

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Ваш ключ генерируется базой данных, поэтому вам нужно дать БД шанс сделать это:

var _result = await db.ToDos.AddAsync(toDo);
db.SaveChanges(); // this generates and fetches the new key
UserToDo userToDo = new UserToDo { ToDoId = _result.Entity.Id, UserEmail = User.Identity.Name};

А потом вам все еще нужно сохранить изменения во второй раз. Посмотрите в свойствах навигации для лучшего пути.

При использовании только UserEmail в качестве ключа в UserToDo каждый пользователь (электронная почта) может иметь только 1 элемент ToDO в вашей базе данных.

public class UserToDo
{
    [Key]
    public string UserEmail { get; set; }
    [Key] // add this to create a composite key
    public int ToDoId { get; set; }
}
0 голосов
/ 28 апреля 2019

изменить эту модель на:

public class UserToDo
{
    [Key]
    public string UserEmail { get; set; }
    public int ToDoId { get; set; }
    public ToDo ToDo { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...