【问题标题】: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 列值是在什么时候生成的?如何从我的代码中获取它?

正确的方法是:

  1. 创建具有 IDENTITY 列的对象
  2. 执行 InsertOnSubmit() 和 SubmitChanges() 以将对象提交到数据库表
  3. 获取对象的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();
    

    在这个例子中,这在代码方面并没有更短,但它确实只允许你提交一个地方,这在结构上通常是一件好事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      相关资源
      最近更新 更多