实体框架'列不允许空值'

时间:2017-08-14 16:12:41

标签: c# entity-framework

然而,令人惊奇的实体框架却未能简化,简单......我创建了一套非常基本的模型,公司,郡,用户与公司有M:1的关系。所以我创建了一个名为CompanyUsers的额外表,我相信它会生成我喜欢的表设计。

但是现在我无法在数据库中输入一个基本用户,声称即使我设置了Id,我也不能拥有null UserId。

我知道我的桌面设计很奇怪,但我最终可能想要切换到M:M关系,并且让这个桌面设置很好。其次,将数据放在3个表中可以使连接时更容易编写SQL查询。

确切错误:

  

System.Data.SqlClient.SqlException:无法将值NULL插入   列' UserId',表' SSI.Database.Context.Software.dbo.Users&#39 ;;   列不允许空值。 INSERT失败。

种子:

var _company = new Company() 
{
    CompanyId=1,
    Name="Company Inc."
};

var _counties = new List<County>() {
    new County(){ Name="Place1" },
    new County(){ Name="Place2"}
};

context.Companies.AddOrUpdate(_company);

var _user = new User() {UserId=1, CompanyId=_company.CompanyId, Company=_company, Name = "John Smith" };


if (context.Counties.Count() == 0)
{
    context.Counties.AddRange(_counties);
}

context.Users.AddOrUpdate(_user);

我所有的模特:

公司:

public class Company
{

    public Company()
    {
        Users = new List<User>();
    }

    [Key]
    public int CompanyId { get; set; }
    public string Name { get; set; }

    public ICollection<User> Users { get; set; }
}

用户:

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string Name { get; set; }


    public Nullable<int> CompanyId { get; set; }

    [ForeignKey("CompanyId")]
    public Company Company { get; set; }
}

公司用户表:

public class CompanyUsers
{
    [Key]
    [Column(Order = 1)]
    public int CompanyId { get; set; }
    [ForeignKey("CompanyId")]
    public virtual Company Company { get; set; }
    [Key]
    [Column(Order = 2)]
    public int UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual User User{ get; set; }
}

1 个答案:

答案 0 :(得分:1)

如果您的ID是由数据库自动生成的,请尝试在用户类

中添加以下脚本

[DatabaseGenerated(DatabaseGeneratedOption.None)]