使用LINQPad将实体插入SQL Compact 4表中的“标识”列

本文关键字:标识 LINQPad 实体 插入 Compact SQL 使用 | 更新日期: 2023-09-27 17:57:46

我正试图使用LINQPad将新记录插入SQL CE 4数据库,但遇到了表的标识问题。比方说,我有一个简单的表格:

PEOPLE
Id int IDENTITY(1,1) NOT NULL,
Name nvarchar(100) NOT NULL

我可能做事情的方式不对,但我在LINQPad 中尝试过

People person = new Person { Name = "Bob" };
People.InsertOnSubmit(person);
SubmitChanges();

但是我得到一个SqlCeException声明

"The colum cannot be modified. [ Column name = Id ]"

我可以用SQL插入一条记录,它不会从SQL CE或其数据提供程序中出错,SQL CE为我设置了Id列,这就是我想要的

INSERT INTO PEOPLE (Name) VALUES ('Bob');

我还错过了另一步吗?我甚至不确定这是否是LINQPad的问题,但我想我无论如何都会问,因为这就是我现在正在尝试的代码。

使用LINQPad将实体插入SQL Compact 4表中的“标识”列

如果在LinqPad 中运行此程序,会得到什么

(from dm in this.Mapping.GetTable(typeof(People)).RowType.DataMembers 
    select new  { dm.DbType, dm.Name, dm.IsPrimaryKey , dm.IsDbGenerated }
 ).Dump();

特别是,据我所知,对于id列,IsDbGenerated应该为true。

我有一个SQL CE 3.5数据文件,我以前在LinqPad中使用过它,查看为插入生成的SQL,它没有提到id

这可能是dbml文件的问题。检查列是否标记为标识(或L2S中的任何名称)。问题是Id不能出现在插入查询中。