如何将带有idUser的计算机作为新值插入?
public class User
{
public User()
{
}
[Key]
public int idUser; { get; set; }
[Required]
public string UserName { get; set; }
}
public class Computer
{
public Computer()
{
}
[Key]
public int idComputer{ get; set; }
public string ComputerName {get;set;}
[ForeignKey("User")]
public int? idUser{ get; set; }
public virtual User User { get; set; }
}
我试过这种方式:
PDbContext _db = new PDbContext();
Computer c = new Computer();
c.ComputerName = "sdsd";
c.User = null;
c.idUser = 0;
_db.Computers.Add(c);
_db.SaveChanges();
但这不会起作用。有什么好看的建议吗?
当我跑步时,我得到L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "FK_dbo.Poste_dbo.User_UserID".
答案 0 :(得分:3)
将idUser标记为可为空。
public int? idUser { get; set; }
此外,您可以摆脱idUser属性,只需使用用户导航道具。由于用户被标记为虚拟,因此您始终可以使用user.Id。
访问UserId这就是我设置您的计算机模型的方法:
public class Computer
{
public int Id { get; set; }
public string ComputerName { get;set; }
public virtual User User { get; set; }
}
或者:
public class Computer
{
public int Id { get; set; }
public string ComputerName { get; set; }
public int? UserId { get; set; }
public User User { get; set; }
}
使用我的第一个示例,您可以这样插入:
PDbContext _db = new PDbContext();
Computer c = new Computer();
c.ComputerName = "sdsd";
c.User = null;
_db.Computers.Add(c);
_db.SaveChanges();
我的第二个:
PDbContext _db = new PDbContext();
Computer c = new Computer();
c.ComputerName = "sdsd";
c.UserId = null;
_db.Computers.Add(c);
_db.SaveChanges();
答案 1 :(得分:0)
[ForeignKey("User")]
public int? idUser{ get; set; }
这是您的计算机课程的一部分。由于并非每台计算机都有用户,因此您使用了nullable-int,以便您可以使用null来表示没有用户的情况。
然而,你这样做:
c.idUser = 0;
这不正确。您出于某种原因使用了nullable-int - 您应该在此处将idUser设置为null。相反,您使用0作为外键的值。由于UserID为0的用户表中没有行,因此会出现您看到的错误。
更改为此,您将在新行的UserID列中获得null;因为它是null,外键约束不会适用:
c.idUser = null;