我无法将相关行插入到我的数据库中。当我在 ASP.NET 应用程序中将新对象插入数据库时,我收到外键冲突错误,而在控制台应用程序中,我没有。
以下是重现问题的步骤:
在新数据库上创建并运行以下 T-SQL 脚本:
create table dbo.[Groups] ( GroupId int identity primary key, Name nvarchar(64) not null ) create table dbo.[Objects] ( ObjectId int identity primary key, GroupId int not null foreign key references [Groups] on delete cascade, Name nvarchar(64) not null )
设置一个名为“ConsoleProgram”的 C# 控制台应用程序。
- 将一个名为“dsObjects”的新数据集添加到项目中。
- 将表“组”和“对象”从服务器资源管理器拖到设计器中。
- 编辑两个表之间的关系,将关系设置为“关系和外键约束”,更新规则为“级联”。
将以下代码插入“Main”:
// (assuming appropriate using statement for dsObjectsTableAdapters) var ds = new dsObjects(); var mgr = new dsObjectsTableAdapters.TableAdapterManager { GroupsTableAdapter = new GroupsTableAdapter(), ObjectsTableAdapter = new ObjectsTableAdapter() }; mgr.GroupsTableAdapter.Fill( ds.Groups ); mgr.ObjectsTableAdapter.Fill( ds.Objects ); var row = ds.Groups.AddGroupsRow( "Fruits" ); ds.Objects.AddObjectsRow( row, "Apple" ); ds.Objects.AddObjectsRow( row, "Banana" ); ds.Objects.AddObjectsRow( row, "Orange" ); mgr.UpdateAll( ds );
运行程序并验证新行是否已插入到相应的表中:
GroupId Name ----------- ------- 1 Fruits (1 row(s) affected) ObjectId GroupId Name ----------- ----------- ------- 1 1 Apple 2 1 Banana 3 1 Orange (3 row(s) affected)
删除新创建的数据。
- 关闭解决方案。
- 创建一个新的 ASP.NET Web 应用程序。
- 重复步骤 3-5。
- 将第 6 步中的代码插入到 Default.aspx 的 Page_Load 函数中。
- 运行程序。
- 请注意有关外键违规的异常(如果有)。
- 再次运行控制台程序,注意数据已成功创建。
- 重新创建数据库并再次运行 ASP.NET 应用程序并注意相同的异常。
我尝试使用 UpdateAll 方法按顺序更新表,两个项目的结果相同。
我完全不知道为什么这会在 ConsoleApplication 中工作,而不是在 ASP.NET 应用程序中工作。有任何想法吗?