c# - C# 关系数据库
问题描述
我有一个关系表,其中用户和笔记之间的连接。我的问题
_result.Entity.Id
返回 -2147482647我使用电子邮件作为键,但是当创建多个笔记时,会出现一个错误,指出我在数据库中已经有这样的电子邮件,我想听听这个问题的解决方案。
我的任务是匹配两个表中的Id注释,但在通信表中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; }
}
我将非常感谢任何帮助
解决方案
您的密钥是数据库生成的,因此您必须让数据库有机会这样做:
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};
然后你仍然需要 SaveChanges 第二次。查看导航属性以获得更好的方法。
只有 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; }
}
推荐阅读
- android - 在 Recyclerview 列表中闪烁
- python - 使用python请求库在http请求中发送json
- python - 不要让matplotlib自动调整x轴的顺序
- node.js - Nodejs 同步 HTTP 请求
- sql-server - 如何在sql server函数中执行动态sql并返回标量值
- java - 如何在java中管理客户端的多个套接字
- jenkins - JENKINS.SF(访问被拒绝)
- java - 通过 excel vba 执行时,Jar 文件将永远运行
- python-2.7 - subprocess.Popen 模块将输出作为第一行
- google-cloud-platform - 使用 Google ML Engine 的预测时出现 ExpirationError