【问题标题】:Handling auto-incrementing IDENTITY SQL Server fields with LINQ to SQL in C#在 C# 中使用 LINQ to SQL 处理自动递增 IDENTITY SQL Server 字段
【发布时间】:2011-03-04 18:43:26
【问题描述】:
我正在构建一个使用 LINQ to SQL 连接到 SQL Server 的 ASP.NET MVC 站点,其中我有一个表,其中有一个表示 ID 的 IDENTITY bigint 主键列。
在我的一个代码方法中,我需要创建该表的一个对象以获取其 ID,我将根据另一个表(FK-to-PK 关系)将其放入另一个对象中。
IDENTITY 列值是在什么时候生成的?如何从我的代码中获取它?
正确的方法是:
- 创建具有 IDENTITY 列的对象
- 执行 InsertOnSubmit() 和 SubmitChanges() 以将对象提交到数据库表
- 获取对象的ID属性值
【问题讨论】:
标签:
c#
sql-server
linq
linq-to-sql
identity-column
【解决方案1】:
身份只会在您调用 SubmitChanges 时生成,因此您列出的方法是一个可行的选择。
但是,您可以做的是在另一个对象上设置 FK 对象而不是 ID,LINQ to SQL 将为您解决。
EG:如果 TableA.TableBID 是 TableB.TableBID 的 FK,那么您指的是采取:
TableB b = new TableB();
context.TableB.InsertOnSubmit(b);
context.SubmitChanges();
TableA a = new TableA();
a.TableBID = b.TableBID;
context.TableA.InsertOnSubmit(a);
context.SubmitChanges();
但是您可以通过像这样为 FK 设置对象来在单个提交中完成:
TableB b = new TableB();
context.TableB.InsertOnSubmit(b);
TableA a = new TableA();
a.TableB = b;
context.TableA.InsertOnSubmit(a);
context.SubmitChanges();
在这个例子中,这在代码方面并没有更短,但它确实只允许你提交一个地方,这在结构上通常是一件好事。