5

Tôi đã sử dụng EF một thời gian, luôn trong phương thức Model-First. Bây giờ tôi đang phiêu lưu qua các vùng đất Code-First. Vấn đề là: Tôi đã gặp vấn đề với việc tạo bảng tự động.EntityFramework không tạo bảng

Theo một số trang web, điều đó là có thể. Và tôi đã thử cách tiếp cận của họ mà không thành công.

Dưới đây là một trong những điều tôi đã cố gắng: Database.CreateIfNotExists()

Không may mắn ...

chuỗi kết nối của tôi là hoàn hảo và làm việc. Nếu tôi thêm bảng theo cách thủ công thì nó sẽ hoạt động. Vấn đề là khi tôi không có bảng được tạo ra. Nó không tạo ra như tôi đã nói.

Lớp học của tôi được trang trí chính xác. (Một lần nữa: Nó hoạt động khi tôi tạo DB)

Bất kỳ đề xuất nào? Tính năng này có thực sự hoạt động không?

Tôi đang sử dụng:

Visual Studio 2010 Professional

EntityFramework 4.3.1 (mặc dù tôi đã cố gắng với 4.1 cũng)

SQL Server 2008 R2

Cảm ơn trước.

+0

Bạn đã tạo lớp ngữ cảnh của riêng mình có nguồn gốc từ DbContext chưa? và sau đó thực hiện cuộc gọi sẽ sử dụng DbSet Thực thể trong bối cảnh – Sergey

+2

Database.CreateIfNotExists() sẽ chỉ khiến EF tạo bảng nếu bản thân cơ sở dữ liệu không tồn tại (trong trường hợp này nó tạo cơ sở dữ liệu và bảng). Nó sẽ không làm cho nó tự động tạo bảng nếu cơ sở dữ liệu tồn tại nhưng bảng bị thiếu. Đây có lẽ là những gì bạn đang chạy vào? –

+0

@Sergey Vâng, tôi đã làm điều đó. – eestein

Trả lời

5

Có ba trình khởi tạo cơ sở dữ liệu được bao gồm trong khung thực thể, tất cả đều triển khai giao diện IDatabaseInitializer<Context>. Đó là:

  • CreateDatabaseIfNotExist (mặc định)
  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

Như bạn thấy API mặc định không có initializer mà chỉ tạo bảng biểu, thay vào đó nó làm toàn bộ cơ sở dữ liệu. Tuy nhiên có những người khởi tạo khác mà mọi người đã tạo ra, có một người làm điều tương tự mà bạn muốn.

Đó là trong gói NuGet EFCodeFirst.CreateTablesOnly

Một lựa chọn khác là tạo ra initializer của riêng bạn nếu đó là điều bạn thực sự cần.

+0

Cảm ơn câu trả lời của bạn. Tối nay, tôi sẽ cố gắng và cho bạn biết nó bằng cách chấp nhận câu trả lời như thế nào. Cảm ơn một lần nữa! – eestein

+0

Bạn được chào đón :) – Sergey

+0

Điều đó có hiệu quả, cảm ơn con người. – eestein