Dọn dữ liệu
Dữ liệu của test này không được rò sang test sau. Gọi CleanAsync() ở đầu test:
await harness.CleanAsync();Trong class DbTestBase, harness chính là Harness.
Nó làm gì
Phần tiêu đề “Nó làm gì”CleanAsync() làm trống mọi user table, bất kể foreign key giữa chúng, và đưa mọi cột identity về giá trị seed. Dòng kế tiếp nhận cùng một id trên mọi engine.
Cơ chế khác nhau theo engine:
Table không có foreign key nào trỏ tới sẽ được truncate. Việc đó làm trống table và đặt identity về đúng seed đã khai báo, bất kể kiểu cột.
SQL Server từ chối truncate table đang bị foreign key tham chiếu, kể cả khi key đã bị disable. Các table đó được làm trống bằng DELETE trong lúc mọi constraint bị disable, rồi constraint được enable lại WITH CHECK để optimizer vẫn tin tưởng chúng. Sau đó identity của chúng được reseed.
Một câu lệnh: TRUNCATE TABLE ... RESTART IDENTITY CASCADE trên mọi base table nằm ngoài pg_catalog và information_schema. Nó làm trống mọi table và đặt mọi sequence sở hữu về giá trị bắt đầu.
Foreign key check được tắt, mọi table được truncate, rồi check được bật lại, tất cả trong một command.
MySQL không giữ seed tách khỏi bộ đếm: TRUNCATE đặt AUTO_INCREMENT về 1, nên table được tạo với AUTO_INCREMENT = n sẽ bắt đầu lại từ 1.
Nó không làm gì
Phần tiêu đề “Nó không làm gì”- Nó không đụng đến hình dạng của object. Đó là việc của shape guard (bộ canh hình dạng schema).
- Nó cũng làm trống reference data mà seed script đã chèn. Hãy seed lại sau khi dọn. Với database project của SQL Server, xem hướng dẫn dacpac để biết sample làm việc này thế nào.