C# 在SubmitChanges调用后,LINQ To SQL是否自动更新本地/客户端id列?

C# 在SubmitChanges调用后,LINQ To SQL是否自动更新本地/客户端id列?,c#,asp.net,sql,vb.net,linq,C#,Asp.net,Sql,Vb.net,Linq,我只是想知道,在SubmitChanges被称为向该表插入新行之后,linq to sql是否自动更新了类(表行对象)的id列,这太棒了,有人能确认这一点吗?是的,只要和分别设置为和true 因此: 这些设置可以在设计器中访问AutoSync.OnInsert和true是默认设置 在这里,您可以看到这一点: var db = new MessageDataContext(); db.Log = Console.Out; Message m = new Message(); m.Text = "H

我只是想知道,在SubmitChanges被称为向该表插入新行之后,linq to sql是否自动更新了类(表行对象)的id列,这太棒了,有人能确认这一点吗?

是的,只要和分别设置为和
true

因此:

这些设置可以在设计器中访问
AutoSync.OnInsert
true
是默认设置

在这里,您可以看到这一点:

var db = new MessageDataContext();
db.Log = Console.Out;
Message m = new Message();
m.Text = "Hello, world!";
db.Messages.InsertOnSubmit(m);
db.SubmitChanges();
在这里,表
消息
有两列
Id
(自动编号主键列)和
文本
。这会在控制台上打印以下内容:

INSERT INTO [dbo].[Message]([Text])
VALUES (@p0)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input VarChar (Size = 13; Prec = 0; Scale = 0) [Hello, world!]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
第二条SQL语句显示了
DataContext
自动检索分配给插入数据库的
消息的标识

因此:


将打印分配给
m

Id
您可以通过查看映射属性的
[column]
属性(或
元素,如果您使用的是外部XML映射文件)来验证在
SubmitChanges()
上是否会更新标识列

将在
[Column]
属性上设置两个属性,
IsDbGenerated=true
AutoSync=OnInsert
——第一个属性告诉LINQ目标列的值是由数据库创建的,例如标识列或时间戳/ROWVERSION列,后者告诉LINQ在数据库插入后使用该值更新模型对象


这两个属性都需要这样设置,以实现预期的行为。如果您使用SqlMetal或VisualStudio designer,生成的代码通常会自动为您处理此问题,只要列以标识或时间戳开始。如果以后将列更改为标识类型,则需要重新生成LINQ代码,或者自己手动更新属性。

您可以尝试一下,看看会发生什么。如果是这样的话,你甚至可以在这里发布你自己的答案。
INSERT INTO [dbo].[Message]([Text])
VALUES (@p0)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input VarChar (Size = 13; Prec = 0; Scale = 0) [Hello, world!]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1
db.Messages.InsertOnSubmit(m);
db.SubmitChanges();
Console.WriteLine(m.Id);