我有一张“学生”表。我想补充一点,学生们的行李包含物品:
Students:
| Id | Name | BagId |
|----|--------|-------|
| 0 | Josh | 0 |
| 1 | Emma | 2 |
Bags:
| Id |
|----|
| 0 |
| 1 |
| 2 |
Items:
| BagId | Item |
|-------|---------|
| 0 | Banana |
| 0 | Apple |
| 1 | Pen |
| 1 | Tissue |
| 2 | Gun |
我需要“手袋”表和BagId,因为我希望除了学生之外的其他实体能够拥有一个包(但如果你有更好的主意,我会全力以赴)。
我的问题:
=>如何在创建Student.BagId列和应用外键约束之间填充Bags表并为每个学生提供BagId? (我不需要填充Items表,所有行李最初都是空的)
我尝试过像
这样的事情UPDATE Students
SET BagId = t.Id
FROM (
INSERT INTO Bags DEFAULT VALUES
OUTPUT INSERTED) as t
没有成功。
我正在使用Entity Framework 6,我想在迁移过程中完成所有这些工作。
答案 0 :(得分:1)
假设bag表中还没有数据,你可以编写一个自定义的sql脚本,你可以按照
的方式做一些事情。DECLARE @Temp TABLE(
StudentId INT,
BagId INT IDENTITY(1,1))
INSERT INTO @Temp(
StudentId
)(
Select Id
from Students
)
SET IDENTITY_INSERT Bags ON
INSERT INTO Bags(
Id
)(
Select BagId
From @Temp
)
SET IDENTITY_INSERT Bags OFF
UPDATE Students
Set BagId = T.BagId
FROM Students S
INNER JOIN @Temp T on T.StudentId = S.Id
--just to show results
Select * from Students
Select * from Bags