1

我正在尝试使用 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 问题,但我想我还是会问,因为这就是我现在正在尝试使用此代码的原因。

4

2 回答 2

2

如果你在 LinqPad 中运行它,你会得到什么

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

特别是,据我了解, IsDbGenerated 对于 id 列应该是正确的。

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

于 2011-05-27T17:46:45.957 回答
1

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

于 2011-05-27T17:21:09.767 回答