C#关系数据库
我有一个关系表,其中连接在用户和注释之间。我的问题C#关系数据库,c#,sql,asp.net-core,entity-framework-core,C#,Sql,Asp.net Core,Entity Framework Core,我有一个关系表,其中连接在用户和注释之间。我的问题 \u result.Entity.Id返回-2147482647 我使用电子邮件作为密钥,但是当创建多个便笺时,会出现一个错误,表明我的数据库中已经存在此类电子邮件,我希望听到此问题的解决方案 我的任务是匹配两个表中的Id注释,但在通信表中Id等于(见1) [HttpPost] 公共异步任务创建(AddToProviewModel模型) { if(ModelState.IsValid) { ToDo ToDo=newTODO{Name=mode
\u result.Entity.Id
返回-2147482647[HttpPost]
公共异步任务创建(AddToProviewModel模型)
{
if(ModelState.IsValid)
{
ToDo ToDo=newTODO{Name=model.title,Body=model.Body};
var_result=await db.ToDos.AddAsync(toDo);
UserToDo UserToDo=newusertodo{ToDoId=\u result.Entity.Id,UserEmail=User.Identity.Name};
var result=await db.UserToDos.AddAsync(userToDo);
db.SaveChanges();
返回重定向(“/Profile”);
}
返回视图(模型);
}
公共课待办事项
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串体{get;set;}
}
公共类UserToDo
{
[关键]
公共字符串UserEmail{get;set;}
public int ToDoId{get;set;}
}
我将非常感谢您的任何帮助您的密钥是数据库生成的,因此您必须给db一个这样做的机会:
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中的键,每个用户(电子邮件)在数据库中只能有一个ToDO项
public class UserToDo
{
[Key]
public string UserEmail { get; set; }
[Key] // add this to create a composite key
public int ToDoId { get; set; }
}
将此模型更改为:
public class UserToDo
{
[Key]
public string UserEmail { get; set; }
public int ToDoId { get; set; }
public ToDo ToDo { get; set; }
}
为什么?你期望从中得到什么?@Henk Holterman我理解错了谢谢你的评论,我改变了它。这封邮件仍然是一把钥匙。它可能会解决
Id
问题,但不会解决1 todo/电子邮件问题。我正在尝试使用两个键迁移UserToDo,我得到此实体类型“UserToDo”有一个用数据批注定义的复合主键。要设置复合主键,请使用fluent api,最好按照错误所述执行:在上下文类中重写OnModelCreating。谷歌寻求帮助。
public class UserToDo
{
[Key]
public string UserEmail { get; set; }
public int ToDoId { get; set; }
public ToDo ToDo { get; set; }
}