【发布时间】:2015-02-20 19:16:21
【问题描述】:
我有一个User 表,它有一个自动递增的ID 主键字段和一个Name 字符串字段。
我还有一个Email 表,它有一个自动递增的ID 主键字段、一个Value 字符串字段和一个将电子邮件地址链接到特定用户的User_ID 字段。它是User 表的外键。
我的项目的需求迫使我使用 Linq to SQL 开发一个 ASP.NET 页面,最终用户必须同时将用户和电子邮件添加到数据库中。
用户创建页面将包含一个用于Name 用户字段的文本框,以及一个启用 AJAX 的网格控件,用于为将要创建的用户插入多个电子邮件地址。它最后还会有一个创建按钮。
启用 AJAX 的网格需要绑定到 Linq to SQL 表。
这里的问题是,在启用 AJAX 的网格中为用户创建电子邮件地址时,我还没有有效的用户 ID,因为我仍然必须通过按“创建”按钮来创建用户记录。
我看到了两种可能的解决方案,但它们都不令人满意且不优雅:
在进入用户创建页面时创建一个包含所有空字段的临时用户对象。这样,在启用 AJAX 的网格中添加电子邮件地址时,我将能够正确维护外键约束。
不要在电子邮件地址表中使用外键约束,并且在创建有效用户 ID 之前使用 null。创建用户 ID 后,我通过将 null 替换为新创建的 ID 来链接先前创建的电子邮件地址。
我相信这不是一个罕见的问题......有没有更优雅的解决方案?
【问题讨论】:
-
请问您为什么不在电子邮件对象之前创建用户对象?此时,您可以在编写电子邮件对象之前将 UserID 插入到它们中
-
@Steve 忘了提到问题中的重要内容:启用 AJAX 的网格需要绑定到 Linq to SQL 表。我可以创建一个模仿 SQL 表架构的自定义数据源,但这似乎没有必要——必须有更好的解决方案
-
为什么有这个要求。因为我会将它全部保留在会话中,并通过 Linq-2-sql 或者可能是一个简单的存储库一次性创建用户+电子邮件地址。您的要求是问题的核心——我真的不认为有任何需要这样的技术要求
标签: c# sql asp.net database linq-to-sql