C# 插入具有整型空值的行

C# 插入具有整型空值的行,c#,entity-framework,C#,Entity Framework,如何将idUser作为新值插入计算机 public class User { public User() { } [Key] public int idUser; { get; set; } [Required] public string UserName { get; set; } } public class Computer { public Computer() { } [Key]

如何将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'指令INSERT en conflicit avec la containe外键“FK_dbo.Poste_dbo.User_UserID”。
将idUser标记为可空

public int? idUser { get; set; }
此外,您可以去掉idUser属性,只使用用户导航道具。由于User被标记为virtual,因此始终可以使用User.Id访问UserId

以下是我如何设置您的计算机模型:

public class Computer
{
    public int Id { get; set; }
    public string ComputerName { get;set; }
    public virtual 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();
这是你计算机课的一部分。因为不是每台计算机都有一个用户,所以您使用了一个可为null的int,以便可以使用null来表示没有用户的情况

但是,您可以这样做:

c.idUser = 0;
这是不对的。您使用可为null的int是有原因的-您应该在这里将idUser设置为null。相反,您使用0作为外键的值。由于users表中没有UserID为0的行,因此此操作将失败,并出现您看到的错误

更改为该值,您将在新行的UserID列中获得null;因为它是null,所以外键约束将不适用:

c.idUser = null;

为什么在
计算机
用户
中都有
idUser
?我想您只需要在
User
中使用它,您可以使用
c.User.idUser
访问它。。。根据您在
计算机中使用的方式,您似乎已经知道如何允许空值。musefan,我已经更新了我的帖子。很抱歉,这是一个打字错误,但问题仍然没有解决。我不明白。问题到底是什么?您正在尝试使用空用户创建一个新的计算机模型?当我运行Iget
L'指令INSERT en conflit avec la contrainte外键“FK_dbo.Poste_dbo.user_UserID”时,
UserID不能为空,但如果将其标记为空,则0.UserID可以为空。您可以通过在int之后添加“?”将其标记为null。例如:public int?用户标识{get;set;}。。。
c.idUser = 0;
c.idUser = null;