我正在尝试将客户保存到我的数据库,而客户有几个关系。但是当我保存我的客户时,CustomerManagers(一对多)似乎不会自动生成他们的Id。我收到这个错误:
“无法将值NULL插入列'Id',表'AppDB.dbo.CustomerManagers';列不允许空值.INSERT失败。\ r \ n语句已终止。”
我的客户类及相关数据:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
public virtual ICollection<CustomerContacts> CustomerContacts { get; set; }
public virtual ICollection<CustomerManager> CustomerManagers { get; set; }
}
public class CustomerContacts
{
public int Id { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public string PhoneNumber { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
public class CustomerManager
{
public int Id { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public string PhoneNumber { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
当我保存我的客户时,CustomerContacts-和CustomerManagers列表中有一个项目,每个ID为Id 0.第一次执行此操作时,它有效,但相关实体在DB中通常从1开始时获得Id 0。 我第二次尝试,我得到上面的插入错误。我无法弄清楚为什么Id不会像往常一样自动生成。我已尝试在Id上设置 [Key] 属性,我也将 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 放在它们上,但结果相同。 为了清楚起见,我只是将Customer添加到Customers表中,并将相关实体作为列表中的项目,然后保存更改。我以前在其他实体上工作过,它保存了相关的实体。
我的存储库方法如下所示:
public void Add(Customer entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Detached)
{
dbEntityEntry.State = EntityState.Added;
}
else
{
DbSet.Add(entity);
}
}
然后我在同一个存储库上有一个Commit方法,只运行DbSet.SaveChanges();
任何帮助都很贴切!
Martin Johansson