C# 在插入前保留表中的ID以保持外键约束完好无损

C# 在插入前保留表中的ID以保持外键约束完好无损,c#,sql,asp.net,database,linq-to-sql,C#,Sql,Asp.net,Database,Linq To Sql,我有一个User表,它有一个自动递增的ID主键字段和一个Name字符串字段 我还有一个Email表,它有一个自动递增的ID主键字段、一个Value字符串字段和一个将电子邮件地址链接到特定用户的User\u ID字段。它是用户表的外键 我的项目要求我开发一个ASP.NET页面,使用Linq to SQL,最终用户必须同时向数据库添加用户和电子邮件 用户创建页面将包含一个用于名称用户字段的文本框,以及一个支持AJAX的网格控件,用于为将要创建的用户插入大量电子邮件地址。它的末尾还将有一个创建按钮 支

我有一个
User
表,它有一个自动递增的
ID
主键字段和一个
Name
字符串字段

我还有一个
Email
表,它有一个自动递增的
ID
主键字段、一个
Value
字符串字段和一个将电子邮件地址链接到特定用户的
User\u ID
字段。它是
用户
表的外键

我的项目要求我开发一个ASP.NET页面,使用Linq to SQL,最终用户必须同时向数据库添加用户和电子邮件

用户创建页面将包含一个用于
名称
用户字段的文本框,以及一个支持AJAX的网格控件,用于为将要创建的用户插入大量电子邮件地址。它的末尾还将有一个创建按钮

支持AJAX的网格需要绑定到Linq to SQL表。

这里的问题是,在启用AJAX的网格中为用户创建电子邮件地址时,我还没有有效的用户ID,因为我仍然必须通过按create按钮创建用户记录

我看到了两种可能的解决方案,但它们既不令人满意,也不雅观:

  • 在进入用户创建页面时,创建一个包含所有空字段的临时用户对象。这样,在启用AJAX的网格中添加电子邮件地址时,我就能够正确地维护外键约束

  • 在电子邮件地址表中不使用外键约束,并在创建有效的用户ID之前使用null。创建用户ID后,我通过用新创建的ID替换null链接以前创建的电子邮件地址


  • 我相信这不是一个罕见的问题。。。有更优雅的解决方案吗?

    在用户完成创建过程时,在服务器端存储电子邮件地址似乎是白费力气。为什么不在本地存储它们,并在创建用户时将它们与其余数据一起传递呢?(您仍然可以通过AJAX进行验证)

    不过,如果您希望将它们存储在服务器上,我建议为创建中的电子邮件地址创建一个单独的表,该表不受外部约束。然后在创建用户时从该表中获取电子邮件地址

    采取这种做法的原因:

  • 不会通过删除约束而牺牲数据库完整性
  • 不会因为允许用户表中出现“垃圾”而牺牲数据库完整性
  • 您可以实施定期运行的清理过程,以清理所有已添加但未继续使用的电子邮件(即创建者未单击“创建用户”按钮)

  • 我可以问你为什么不在电子邮件对象之前创建用户对象吗?在这一点上,您可以在写入之前在电子邮件对象中插入用户IDthem@Steve忘了在问题中提到一些重要的东西:支持AJAX的网格需要绑定到Linq to SQL表。我可以创建一个模仿SQL表模式的自定义数据源,但这似乎是不必要的——必须有更好的解决方案来满足这一需求。因为我会将所有内容保持在会话中,并通过Linq-2-sql或一个简单的存储库一次性创建user+emal地址。您的要求是问题的核心-我真的认为没有必要提出这样的技术要求