3

例如,我有下表:

顾客信息

cus_id: auto increment, int, is Identity
cus_name: nvarchar

如果我使用以下代码插入记录“彼得”,

string name = "Peter";
DataContext DC = new DataContext();
CustomerInfo newCustomer = new CustomerInfo();
newCustomer.cus_name = name;

DC.CustomerInfos.InsertOnSubmit(newCustomer);
DC.SubmitChanges();

以下错误返回,

无法对“表(客户信息)”执行创建、更新或删除操作,因为它没有主键。

我是否需要自定义cus_id或任何其他解决方案?谢谢!

4

3 回答 3

10

首先,LINQ-To-SQL 需要主键才能进行插入和更新,因此您可能必须在表中添加主键。

现在,因为它是一个自动递增的标识列,所以在您的 dbml 中,您必须选择“CustomerInfo”表的“cus_id”列并转到属性并设置以下内容:

  • 自动生成值:真
  • 自动同步:OnInsert

这将确保当您插入新行时,它将获得一个新的 id。

于 2013-07-31T06:32:02.310 回答
1

从问题的答案 1 中叙述,您也必须将 cus_id 作为主键。您也可以尝试执行以下操作

CREATE TABLE Customers
(
cus_id int NOT NULL AUTO_INCREMENT,
cus_name varchar(255) NOT NULL,
PRIMARY KEY (cus_id)
)
于 2013-07-31T06:20:43.453 回答
0

我得到了这个错误。据我设法修复它是添加一个主键。这段代码使我成为主键并使其自动递增。也许这就是你要找的东西?(创建表时)

columnname bigint IDENTITY(1,1) NOT NULL,
CONSTRAINT pkcolumnname PRIMARY KEY CLUSTERED 
于 2013-07-31T06:19:02.500 回答