công ty thực phẩm và nước giải khát rita

Cách xử lý lỗi There is already an object named TableName in the database khi chạy Update-Database trong Entity Framework Core

Cách xử lý lỗi There is already an object named TableName in the database khi chạy Update-Database trong Entity Framework Core
Khi sử dụng Entity Framework Core để quản lý database bằng Migration, đôi khi chạy lệnh Update-Database sẽ gặp lỗi:
công ty thực phẩm và nước giải khát rita

 

There is already an object named 'TableName' in the database

Lỗi này thường xảy ra khi Migration trong project không khớp với lịch sử Migration đã lưu trong database. Trong bài viết này sẽ giải thích nguyên nhân và cách xử lý triệt để để tiếp tục thêm bảng mới mà không làm ảnh hưởng dữ liệu hiện có.

Nguyên nhân lỗi

Entity Framework Core sử dụng bảng:


 

__EFMigrationsHistory

để lưu lại MigrationId của các migration đã chạy.

Mỗi migration có định dạng:


 

Timestamp_MigrationName

Ví dụ:


 

20260106143220_Initial
20260313025008_Gold

Khi chạy lệnh:


 

Update-Database

EF Core sẽ:

  1. Đọc danh sách migration trong project

  2. So sánh với __EFMigrationsHistory

  3. Chạy những migration chưa tồn tại trong bảng này

Lỗi xảy ra khi:

  • Migration trong database:


 

20260106030539_Initial

  • Migration trong project:


 

20260106143220_Initial

Hai timestamp khác nhau, nên EF nghĩ migration Initial chưa chạy và cố tạo lại các bảng như:


 

AppCategories
AppPosts
AppTags

Trong khi các bảng này đã tồn tại → SQL Server báo lỗi.


Cách kiểm tra

Bước 1: Kiểm tra migration trong database


 

SELECT * FROM __EFMigrationsHistory

Ví dụ kết quả:


 

MigrationId
--------------------------------
20260106030539_Initial


Bước 2: Kiểm tra migration trong project

Trong thư mục:


 

Migrations

có file:


 

20260106143220_Initial.cs
20260313025008_Gold.cs

Có thể thấy timestamp của Initial không giống nhau.


Cách xử lý

Chỉ cần cập nhật lại MigrationId trong bảng __EFMigrationsHistory để khớp với migration trong project.

Chạy SQL:


 

UPDATE __EFMigrationsHistory
SET MigrationId = '20260106143220_Initial'
WHERE MigrationId = '20260106030539_Initial'

Sau khi cập nhật, bảng sẽ trở thành:


 

MigrationId
--------------------------------
20260106143220_Initial


Chạy lại Migration

Sau khi đồng bộ MigrationId, chạy lại:


 

Update-Database

Entity Framework sẽ hiểu rằng:


 

Initial → đã chạy
Gold → chưa chạy

và chỉ chạy migration mới (Gold), ví dụ tạo các bảng:


 

AppGoldProviders
AppGoldTypes
AppGoldPrices


Lưu ý quan trọng

Để tránh lỗi này trong tương lai:

  1. Không xóa hoặc sửa migration đã chạy trên database.

  2. Không tạo lại migration Initial sau khi database đã được tạo.

  3. Khi restore database từ backup, cần đảm bảo bảng __EFMigrationsHistory vẫn tồn tại.

  4. Khi deploy production nên kiểm tra:


 

SELECT * FROM __EFMigrationsHistory


Kết luận

Lỗi “There is already an object named 'TableName' in the database” khi chạy Update-Database thường do Migration trong project không khớp với MigrationId trong database. Chỉ cần đồng bộ lại MigrationId trong bảng __EFMigrationsHistory là có thể tiếp tục sử dụng Migration bình thường mà không cần xóa database hay mất dữ liệu.

công ty thực phẩm và nước giải khát rita

Đọc thêm

Cùng thể loại
Lấy dữ liệu và hiển thị tỷ giá ngoại tệ của ngân hàng Vietcombank
Ngôn ngữ C#

Lấy dữ liệu và hiển thị tỷ giá ngoại tệ của ngân hàng Vietcombank

Liên quan
iPhone 17: Những nâng cấp đáng mong chờ từ Apple
Công nghệ thông tin

iPhone 17: Những nâng cấp đáng mong chờ từ Apple

Làm cách nào tắt tất cả chế độ bảo vệ file unlock cùng lúc
Thủ thuật tiện ích

Làm cách nào tắt tất cả chế độ bảo vệ file unlock cùng lúc

Vinhomes Grand Park Thủ Đức cơ hội đầu tư hay nơi sống lý tưởng
Bất động sản Vinhomes

Vinhomes Grand Park Thủ Đức cơ hội đầu tư hay nơi sống lý tưởng

0 phản hồi

Nhận tư vấn miễn phí

Để lại thông tin, mình sẽ liên hệ lại sớm.