11

Tôi đang bắt đầu một ứng dụng mới phải sử dụng cơ sở dữ liệu hiện có sử dụng một số quy ước đặt tên thực sự gây phiền nhiễu trong .net (tên bảng bắt đầu bằng một số trigram xác định miền kinh doanh của bảng, tên cột bắt đầu với các bảng hình tam giác, các hình tam giác được viết hoa và phân tách bằng dấu gạch dưới, v.v.).Thay đổi tên thực thể và thuộc tính trong Database First

Điều tôi muốn làm là viết quy tắc đổi tên đơn giản (điều này cũng đơn giản như tìm dấu gạch dưới cuối cùng và lấy mọi thứ sau đó) và áp dụng nó trong Khuôn khổ thực thể. Tôi không thực sự muốn chỉnh sửa từng cái một trong trình soạn thảo, đặc biệt là vì cơ sở dữ liệu có thể thay đổi và tôi không muốn thực hiện nó nhiều lần.

Tôi đang sử dụng Database First (như cơ sở dữ liệu đã tồn tại và nó là "master") và EF 4.x DbContext Generator và nó hoạt động thực sự tuyệt vời trong hộp (với các lớp và thuộc tính có tên xấu) .

Tôi đã chỉnh sửa mẫu T4 để đổi tên các thực thể và thuộc tính đã tạo, nhưng khi tôi cố thực hiện bất kỳ yêu cầu nào, đối tượng DbContext không thể tìm thấy bảng khớp với thực thể mà tôi đang cố gắng yêu cầu nhận ngoại lệ này:

Loại thực thể [Tên thực thể] không phải là một phần của mô hình cho ngữ cảnh hiện tại .

Điều này rõ ràng là lý do tại sao nó không tìm thấy bảng: không có gì cho biết cách khớp với tên đối tượng và bảng khi tôi thay đổi nó khi đang di chuyển. Tôi đọc rằng tôi có thể thêm hướng dẫn trong phương pháp OnModelCreating(DbModelBuilder modelBuilder) nhưng điều này không được sử dụng trong Cơ sở dữ liệu đầu tiên (và mẫu T4 mặc định thêm một ngoại lệ trong đó, chỉ trong trường hợp).

Vì vậy, bây giờ tôi bị kẹt, tôi không biết cách chỉ định kết hợp đó.

Dưới đây là một vài ý tưởng tôi có nhưng không chắc chắn nếu nó đúng hay doable:

  • Sử dụng "số nhiều/ít" API để thay đổi tên của Entity? Âm thanh như một cách giải quyết dơ bẩn. Nhưng nó có thể làm việc (không thử).
  • Tìm cách chỉnh sửa tệp EDMX khi đang di chuyển.
  • Chỉnh sửa EDMX sau đó nhưng có thể làm phức tạp quá trình (chỉnh sửa trong trình thiết kế, sau đó thực hiện công cụ để thay đổi EDMX, sau đó chạy công cụ tùy chỉnh để tạo lại thực thể và DbContext ... trong khi hôm nay tôi chỉ cần chỉnh sửa trong thiết kế).
  • Sử dụng mã Đầu tiên (vì có vẻ dễ sử dụng tên thực thể khác với tên bảng, thông qua thuộc tính hoặc hướng dẫn trong lớp DbContext), nhưng có vẻ như sẽ không phức tạp hơn khi sử dụng nó với cơ sở dữ liệu hiện có.

Bất kỳ ý tưởng nào? Hay tôi đã bỏ lỡ điều gì đó?

Trả lời

7

Bạn sẽ không thể sử dụng biến đổi T4 cho điều này, vì bạn muốn thay đổi nội dung của tệp .edmx thực tế để ánh xạ tên thực thể lưu trữ của bạn (với tiền tố đáng ghét) vào tên thực thể khái niệm đã được vệ sinh của bạn. Thay vào đó, bạn nên viết một ứng dụng có một tệp .edmx làm đầu vào và khử trùng các tên theo thẻ mô hình khái niệm và sửa đổi tên ánh xạ để phản ánh tên được vệ sinh. Tôi hiểu rằng đây là lựa chọn thứ ba của bạn và bạn muốn tránh điều này nếu có thể, nhưng đây là cách đơn giản nhất để thực hiện nó.Hãy nhớ rằng bạn sẽ chỉ phải chạy công cụ này khi bạn thêm các bảng hoặc cột mới.

+2

Tôi sợ nhận câu trả lời đó :). Tôi đã hy vọng rằng tôi đã bỏ lỡ một cái gì đó. Có vẻ như ai đó đã thực hiện công cụ đó: http://blog.cincura.net/228749-making-names-of-entities-or-any-identifiers-in-entity-framework-model-code-and-developer-friendly -not-uppercase / –