身份规范在Linq中不起作用

时间:2010-11-08 18:57:58

标签: sql linq linq-to-sql

我正在尝试使用linq在表中插入一行,并且表的ID列具有标识规范:

CREATE TABLE [dbo].[Event](
    [ID] [int] IDENTITY(36,1) NOT NULL,
    [Description] [nvarchar](100) NOT NULL,
    [OccurredDateTime] [datetime] NULL,
 CONSTRAINT [PK_Event] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我在Visual Studio项目的DBML文件中考虑了身份规范:

[Table(Name="dbo.Event")]
public partial class Event : INotifyPropertyChanging, INotifyPropertyChanged
{
  /* ... */
  [Column(Storage="_ID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
  public int ID
  {
    /* ... */
  }

  /* ... */
}

出了什么问题?当我尝试这样插入时:

Data.Event myEvent = new Data.Event();

myEvent.Description = summaryText;
db.Events.InsertOnSubmit(myEvent);                    
db.SubmitChanges();

抛出以下异常:

  

SqlException:无法插入值   列'ID'列中的NULL   'redacted.dbo.Event';专栏没有   允许空值。 INSERT失败。该   声明已被终止

1 个答案:

答案 0 :(得分:0)

我试过这个设置 - 对我来说就像一个魅力。我可以插入一个新的Event对象 - 完全没问题 - 我确实立即取回了新的ID ....

您确定您的数据库和模型是否同步?该表可能不是真的用INT IDENTITY创建的吗?