2008-08-15 31 views
8

Tôi đã cài đặt VS SP1 và chơi xung quanh với Entity Framework.Cập nhật lược đồ cơ sở dữ liệu trong Entity Framework

Tôi đã tạo một giản đồ từ cơ sở dữ liệu hiện có và đã thử một số thao tác cơ bản.

Hầu hết mọi thứ đều diễn ra tốt đẹp, ngoại trừ cập nhật giản đồ cơ sở dữ liệu.

tôi đã thay đổi cơ sở dữ liệu trong mọi phương diện cơ bản:

  • thêm một bảng mới
  • xóa một bảng
  • thêm một cột mới vào một bảng hiện có
  • xóa một cột từ một bảng hiện có
  • đã thay đổi loại cột hiện tại

Ba cái đầu tiên đã chạy tốt, nhưng sự thay đổi kiểu và việc xóa cột không tuân theo các thay đổi của cơ sở dữ liệu.

Có cách nào để thực hiện là công việc của nhà thiết kế không? Hoặc là nó không được hỗ trợ vào lúc này? Tôi chưa tìm thấy bất kỳ tài liệu liên quan nào, nhưng vẫn đang tìm kiếm.

+0

Câu hỏi hay. Đã có vấn đề tương tự gần đây và một vài năm trước đây. :-) Có lẽ đáng nói, đổi tên một cột hiện có có thể gây đau đầu. – mnemonic

+0

Vâng, bây giờ nó đã rất trưởng thành, với codefirst tôi không còn gặp vấn đề này nữa. – Biri

Trả lời

6

Tôi đoán rằng có thể những điều đó không xảy ra vì chúng sẽ phá vỡ bản dựng cho mã hiện có, nhưng đó chỉ là một sự đoán đoán về phía tôi.

Dưới đây là logic của tôi:

Thứ nhất, EF được coi là hơn 1: 1 bản đồ bảng, do đó, nó hoàn toàn có thể rằng chỉ vì bạn đang xóa một cột từ bảng A không có nghĩa là cho thực thể đó , không nên có thuộc tính Mô tả. Bạn chỉ có thể ánh xạ thuộc tính đó tới một bảng khác.

Thứ hai, việc thay đổi loại chỉ có thể phá vỡ các bản dựng. đó là lý do duy nhất ở đó.

+0

Thay đổi một loại có thể phá vỡ các bản dựng, nhưng trong ứng dụng thế giới thực thì nó sẽ xảy ra. RoR hoặc Django có quy trình ma sát cực kỳ thấp cho điều đó. Để xử lý "ngắt", bạn tạo dữ liệu di chuyển. Nếu EF không có thì có rất nhiều thứ để bắt kịp. –

1

Từ bản trình diễn của nhà thiết kế mà tôi đã thấy, nó không phải là một công cụ hoàn hảo. Nó là một sản phẩm phiên bản 1.0, do đó, nó bị ràng buộc để có một số điểm đau. Loại thay đổi là một trong số đó. Từ việc xem nhà thiết kế và tạo mã, tôi đã tìm ra rằng một trong số đó sẽ phá vỡ vào thời gian biên dịch (không có khả năng) hoặc tại thời gian chạy (khi mô hình thực sự được thực thi).

0

Bạn cần tự xóa cột khỏi trình thiết kế hoặc tệp XML.

5

Tôi nhận thấy rằng, nói chung, vẫn còn khá nhiều lỗi với chức năng 'Cập nhật Mô hình từ Cơ sở dữ liệu'.

Phím là kẻ giết người đối với tôi - Tôi chưa có bất kỳ sửa đổi nào đối với mối quan hệ nước ngoài hoặc thêm Khóa chính vào bảng và có công cụ cập nhật chính xác (ở chỗ nó sẽ biên dịch lỗi trên mã được tạo) - nhưng để giải quyết vấn đề đó là một vấn đề đơn giản khi xóa mô hình và nhập lại (chỉ mất một phút) - điều này ít rõ ràng hơn lý tưởng, nhưng tôi chưa bao giờ thất bại 'nhập.

+1

Nó cảm thấy rất sai lầm khi xóa và bắt đầu lại ... nhưng tôi đoán tôi không phải là người duy nhất phải dùng đến điều này! –

0

Như đã đề cập trước đây, bạn chỉ có thể xóa cột khỏi trình thiết kế. Theo như thay đổi kiểu dữ liệu của cột: chỉ cần làm mới mô hình từ cơ sở dữ liệu, sau đó chuyển đến bảng ánh xạ và chọn cột mà bạn đã thay đổi trong DB. các giá trị bên phải đại diện cho mô hình của bạn, đủ kỳ quặc, điều này không được cập nhật tự động, nhưng chỉ cần chọn cột bên phải và đi đến các thuộc tính và thay đổi kiểu dữ liệu ở đó. Nó sẽ trở thành một trình đơn thả xuống.

Chúc mừng.

Ruddy

0

Tôi đã tạo ứng dụng tương tự như bạn đã yêu cầu. Nhưng giải pháp của tôi là khó. Tôi sẽ cố gắng nói;

  1. Bạn phải tạo các vòng điều khiển quản lý cơ sở dữ liệu của riêng mình và các đối tượng này sẽ chịu trách nhiệm tạo, cập nhật giản đồ cơ sở dữ liệu (tôi đã tạo thủ công).

  2. Tôi thấy bài viết và mã nguồn tốt trên ADO.NET Team blog thì bạn cũng có thể tải xuống EDMTools từ blog này, mã nguồn mở. Và bạn cũng có thể triển khai tạo mô hình và cập nhật các thói quen từ đó vào dự án của bạn.

  3. Cuối cùng khi lược đồ của bạn thay đổi, bạn nên tạo lại và ràng buộc mô hình của mình và xây dựng lại cụm dữ liệu trong thời gian chạy. Nhưng bạn phải biết suy nghĩ quan trọng nhất, bạn nên kết hợp mô hình dữ liệu của bạn với dự án của bạn với một cách lỏng lẻo (xem post)

    Cách khác, bạn nên đợi bản phát hành EF 4.0 (CTP 1 bây giờ), đã thông báo rằng họ sẽ cung cấp tạo, xóa, cập nhật các hàm DatabaseScript.

Tốt khóa

0

Con đường tôi đang làm điều này (và tôi đang làm tất cả những điều bạn đề cập đến, cộng với đổi tên cột) là bằng cách thay đổi cơ sở dữ liệu và tạo lại mã EF sử dụng EF Code Đầu tiên.

Tôi không giả mạo với các mã EF Các lớp học đầu tiên cho hàng hóa tốt hay xấu (bao gồm cả các cột có tên vô nghĩa về quan hệ) để giảm bớt quá trình.

Không có trình tạo lược đồ ORM hoặc nhà thiết kế nào có thể thực hiện thay đổi đối với cơ sở dữ liệu sản xuất của bạn nếu nó có dữ liệu bị hạn chế trong đó. Đây là lý do tại sao bạn nên luôn bắt đầu với việc kiểm tra xem các thay đổi của bạn đối với DB có khả thi không, hãy thử chúng trên cơ sở dữ liệu phát triển và sau đó điều chỉnh mã của bạn để phản ánh các thay đổi.

Các vấn đề liên quan