问题描述
||
我正在尝试使用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中运行此程序会得到什么
(from dm in this.Mapping.GetTable(typeof(People)).RowType.DataMembers
select new { dm.DbType,dm.Name,dm.IsPrimaryKey,dm.IsDbGenerated }
).Dump();
特别是,据我了解,IsDbGenerated对于id列应为true。
我有一个我先前在LinqPad中使用过的SQL CE 3.5数据文件,并且查看为插入而生成的SQL并没有提及id
, 这可能是dbml文件的问题。检查该列是否标记为标识(或在L2S中称为“标识”)。问题是ID不能出现在插入查询中。