保存父项时,不会为相关实体生成Id

时间:2016-05-03 07:00:05

标签: c# sql-server entity-framework

我正在尝试将客户保存到我的数据库,而客户有几个关系。但是当我保存我的客户时,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

0 个答案:

没有答案