我们最近在数据库中添加了一个新的"级别" - 在整个数据库中表中的现有ID身份字段之前,添加了一个密钥" Company_ID"。

例如,如果表格具有ID,则现在具有Company_ID,然后是ID,然后是字段。这个想法是,这允许ID自动向功能提供的每个不同的Company_ID值(Company_ID 1可以具有ID 1、2、3等; Company_ID 2可以具有ID 1、2、3等)。

自动插入字段仍然是ID。一个示例表是:

    [dbo].[Project](
      [Company_ID] [int] NOT NULL,
      [ID] [int] IDENTITY(1,1) NOT NULL,
      [DescShort] [varchar](100) NULL,
      [TypeLookUp_ID] [int] NULL,
      [StatusLookUp_ID] [int] NULL,
      [IsActive] [bit] NOT NULL,
    CONSTRAINT [PK_Project] PRIMARY KEY CLUSTERED 
    (
      [Company_ID] ASC,
      [ID] ASC
    )

在引入Company_ID之前,要执行创建,我们只是简单地填充了descshort,typelookup_id,statuslookup_id和ISActive字段,然后默认情况下ID是任何情况,可能是0。

该记录得以成功保存,并且ID被数据库自动填充,然后用来通过视图进行表演,依此类推。

但是,现在,我们希望将Company_ID设置为指定的值,离开ID并像以前一样填充字段。

    _db.Project.Add(newProject);
    _db.SaveChanges();

是的,我们要指定Company_ID值。我们希望按照以前的方式自动填充ID。我们收到错误消息:

当Identity_insert设置为关闭时

这是由指定Company_ID或ID字段引起的吗?您知道我们如何纠正这个问题吗?

答案

睡觉后,我找到了这一点,用于Visual Studio C#代码:[DatabaseGenerated(DatabaseGeneratedOption.Identity)]。这个(用我的话)为我的每个ID字段,告诉Visual Studio,该字段是一个身份,并且在将值发送到数据库时"单独"。什么时候Company_ID首先发生,并具有一个价值,告诉Visual Studio,在其他地方有一个身份字段允许_db.Project.Add(newProject);进而_db.SaveChanges();根据需要运行。答案的这一部分是针对视觉工作室方面的。我了解SQL要求IDENTIY_INSERT因此,感谢 @Matt-Thrower, @Steve-Pettifer和其他贡献的人。

来自: stackoverflow.com