0

我正在使用 LINQ-to-SQL 类。我正在使用 LINQ 方法插入新行object.InsertOnSubmit()

Identity我需要为表主键列设置由 SQL Server(使用)生成的相同值。

现在我在将新行插入表时需要相同的值。并且仅在插入时为同一表中的其他列设置相同的值。

因为插入后我无法更新,因为表有 UPDATE TRIGGER。

我尝试了以下

_db.EmpNews.InsertOnSubmit(_EmpNews);
...
_db.DisplaySeq = _EmpNews.ID;
...
_db.SubmitChanges();

ID自动生成的 ( Identity) 列在哪里。

4

1 回答 1

4

第一个问题确实是:为什么需要将相同的值存储在同一个表的两个单独的列中?你需要这个做什么?对我来说似乎没有多大意义......

由于该IDENTITY列的值仅在实际插入该行后才可用,因此无法在该行确实保存到数据库表之前获取该值并将其设置为另一列。

这基本上留下了三个选项来获取该值并将其存储在其他地方:

  • 您可以编写一个AFTER INSERT触发器,将另一列设置为刚刚插入该IDENTITY列的值

  • 您可以将整个保存过程包装到您从 C# 代码调用的存储过程中(而不仅仅是保存对象),然后您将执行INSERT该行,然后获取新创建的IDENTITY值并使用该新值再次更新该行. 但这会导致UPDATE发生 - 你似乎说因为UPDATE触发器而对你来说是不可能的(不太清楚为什么这应该是一个问题......)

  • 您可以编写两行 C# 代码来获取IDENTITY插入后的值(并且在ID对象的属性中可用),然后再次存储该对象。但这也会导致UPDATE发生 - 你似乎说因为UPDATE触发器而对你来说是不可能的(不太清楚为什么这应该是一个问题......)

所以我想你最好的选择是INSERT触发这样做。

尝试这样的事情:

CREATE TRIGGER trInsertEmpNews 
ON dbo.EmpNews AFTER INSERT 
AS BEGIN
    UPDATE dbo.EmpNews 
    SET DisplaySeq = i.ID
    FROM INSERTED i
    WHERE dbo.EmpNews.ID = i.ID
END
于 2012-12-25T07:34:01.670 回答