插入具有整数空值的行

时间:2014-04-15 15:28:02

标签: 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]   
    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".

2 个答案:

答案 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;