Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#关系数据库_C#_Sql_Asp.net Core_Entity Framework Core - Fatal编程技术网

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

  • 我使用电子邮件作为密钥,但是当创建多个便笺时,会出现一个错误,表明我的数据库中已经存在此类电子邮件,我希望听到此问题的解决方案

  • 我的任务是匹配两个表中的Id注释,但在通信表中Id等于(见1)

  • [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; }
    }