2013-05-30 39 views
10

Ai đó có thể giải thích khái niệm về Migrators (cụ thể là fluentmigrator)?Giải thích về người di cư (FluentMigrator)?

Dưới đây là (có thể bị nhầm lẫn) sự kiện Ive lượm lặt về đề tài này:

  • Có một cách để bước đầu tạo ra sau đó duy trì cập nhật cho một cơ sở dữ liệu bằng cách versioning.

  • Di chuyển đầu tiên (hoặc phiên bản ban đầu của cơ sở dữ liệu ) sẽ chứa tất cả các bảng, mối quan hệ và thuộc tính bắt buộc (thực hiện trôi chảy hoặc sử dụng đoạn sql trong tập lệnh).

  • Khi bạn muốn thay đổi cơ sở dữ liệu, bạn sẽ tạo phương thức di chuyển mới (Lên và Xuống), giống như thêm bảng mới hoặc sửa đổi trường.

  • Để triển khai một trong các di chuyển này, bạn sẽ sử dụng dòng lệnh chỉ định dll chứa di chuyển, chuỗi kết nối và phiên bản được yêu cầu.

Nếu bạn có một bộ mô hình dữ liệu khá phức tạp, sẽ không khó khăn và mất thời gian để tạo định nghĩa di chuyển cho tất cả những điều đó?

Tôi biết với nHibernate/fluent bạn có thể dễ dàng tạo bảng cho cơ sở dữ liệu mà không cần phải xác định bất kỳ thứ gì ngoài các mô hình và tệp bản đồ. Có cách nào để làm cho cấu hình này tương thích với Migrator/Versioning không?

Khi nhibernate/fluent chịu trách nhiệm tạo cơ sở dữ liệu, tôi không nhất thiết phải xác định mọi khía cạnh của bảng. Nó được thực hiện thông qua quy ước hoặc thông qua các tập tin bản đồ. Với những người di cư tôi cần xác định mức độ chi tiết này?

Trả lời

19

Rất nhiều câu hỏi tại đây. Tôi sẽ trả lời các câu hỏi với trọng tâm là FluentMigrator.

Đây là cách tạo ban đầu rồi duy trì cập nhật cho cơ sở dữ liệu bằng cách tạo phiên bản.

FluentMigrator là cách kiểm soát phiên bản lược đồ cơ sở dữ liệu của bạn. Mọi người làm điều đó theo một cách nào đó. Hoặc bằng tay, với các kịch bản sql, với một công cụ như SqlCompare hoặc một dự án Visual Studio Database. Tất cả các phương pháp này rất dễ gây rối. Rất dễ mắc lỗi khi phát hành phiên bản mới và khiến hệ thống gặp sự cố. Di chuyển là cách tốt hơn để xử lý việc này.

FluentMigrator cho phép bạn xác định thay đổi đối với giản đồ dưới dạng mã và điều này thường được kiểm tra trong điều khiển nguồn của bạn với các thay đổi mã khác. Có nghĩa là bạn có thể nói phiên bản 1.XX của hệ thống của bạn nên có phiên bản 123 của cơ sở dữ liệu. Nó có nghĩa là nếu bạn quay trở lại mã của bạn để phiên bản trước đó bạn cũng biết những gì phiên bản của cơ sở dữ liệu để rollback là tốt.

Nó có thể được sử dụng để tạo lược đồ cơ sở dữ liệu ngay từ đầu hoặc bắt đầu với kiểm soát phiên bản lược đồ cho cơ sở dữ liệu hiện có.

Di chuyển là cách mô tả thay đổi đối với giản đồ cơ sở dữ liệu của bạn.FluentMigrator tạo ra một bảng VersionInfo và lưu trữ id duy nhất (số phiên bản) của Migration after đã được áp dụng. Ví dụ, nếu tôi có hai Di chuyển một với Id 1 và một với Id 2. Nếu sau đó tôi thực hiện di chuyển đầu tiên sau đó Id 1 sẽ được lưu trữ trong bảng VersionInfo và tôi có thể nhìn thấy ở đó và biết rằng phiên bản của cơ sở dữ liệu là 1 và phiên bản 2 chưa được áp dụng.

Có thể biết phiên bản nào lược đồ cơ sở dữ liệu rất hữu ích khi đẩy các thay đổi từ Kiểm tra sang sản xuất hoặc nếu bạn có nhiều bản sao của cơ sở dữ liệu trong Sản xuất. Ví dụ, tôi có một khách hàng với các văn phòng trên toàn thế giới và mỗi văn phòng có bản sao cơ sở dữ liệu của riêng họ và tất cả chúng đều có trên các phiên bản khác nhau. Nếu không biết phiên bản cơ sở dữ liệu thì rất khó để cập nhật chúng một cách an toàn.

Hầu hết thời gian tôi không cần thực sự tìm trong bảng VersionInfo, FluentMigrator sẽ xử lý tự động. Nó so sánh assembly với Migrations đến bảng VersionInfo và tìm ra những thay đổi nào chưa được áp dụng và sau đó thực thi chúng.

Việc chuyển đầu tiên (hoặc phiên bản ban đầu của cơ sở dữ liệu) sẽ chứa tất cả các bảng, mối quan hệ và các thuộc tính cần thiết (thực hiện một trong hai thành thạo hoặc sử dụng một đoạn của sql trong một kịch bản).

Điểm bắt đầu tùy thuộc vào bạn. Bạn có thể có di chuyển đầu tiên là tập lệnh sql mà bạn đã tạo từ cơ sở dữ liệu hiện tại. Bạn cũng có thể sử dụng một trong các dự án contrib như để tạo ra một chuyển đổi lưu loát. Hoặc bạn chỉ có thể quyết định rằng cơ sở dữ liệu hiện có là điểm bắt đầu và lưu một bản sao của nó để có thể khôi phục nó như phiên bản 1.

Tôi đã giới thiệu FluentMigrator cho rất nhiều cơ sở dữ liệu cũ mà không gặp bất kỳ vấn đề lớn nào.

Khi bạn muốn đẩy một sự thay đổi đến một cơ sở dữ liệu, bạn sẽ tạo ra một phương pháp di cư mới (lên và xuống), giống như thêm một bảng mới hoặc sửa đổi một lĩnh vực.

Có, Up được sử dụng để áp dụng thay đổi được chỉ định trong Di chuyển và Xuống sẽ cuộn lại. Vì vậy, Up có thể là để tạo ra một bảng và xuống có thể được thả bảng.

Để triển khai một trong những cuộc di cư, bạn sẽ sử dụng một dòng lệnh xác định dll chứa di cư, các chuỗi kết nối và phiên bản yêu cầu.

Có ba runners có sẵn để thực thi di chuyển. Á hậu dòng lệnh, nhiệm vụ Nant và nhiệm vụ MSBuild. Thường được thực hiện như là một phần của một kịch bản xây dựng.

Lớp MigrationRunner cũng có thể được sử dụng trong mã. Bạn có thể làm điều này nếu bạn muốn xây dựng nhân vật riêng của mình hoặc nếu bạn có nhu cầu khác (như xây dựng cơ sở dữ liệu động hoặc tự động cập nhật cơ sở dữ liệu nếu có thêm di chuyển mới.)

Nếu bạn có một bộ khá phức tạp các mô hình dữ liệu, có phải không, thay vì phải là khó khăn và tốn thời gian để tạo ra một định nghĩa di chuyển cho tất cả của mô hình đó?

Tôi chủ yếu đã trả lời câu hỏi này. Nó thường khá dễ dàng để tạo ra một kịch bản sql cho một cơ sở dữ liệu. Đối với Sql Server phải mất ít hơn một phút để tạo kịch bản ngay cả đối với các cơ sở dữ liệu lớn. Tập lệnh này có thể được lưu trong tệp .sql và được thực thi như lần di chuyển đầu tiên sử dụng biểu thức Execute.EmbeddedSqlScript. Nó hoạt động một điều trị.

Tôi biết với nHibernate/thông thạo, bạn có thể dễ dàng tạo ra bảng cho một cơ sở dữ liệu mà không cần phải xác định bất cứ điều gì khác hơn so với các mô hình và file bản đồ. Có cách nào để làm cho cấu hình này tương thích với Trình di chuyển/Phiên bản không?

Hiện tại, không có sự tích hợp như vậy và trong thực tế tôi, ít nhất, đừng bỏ lỡ nó. Có một số cuộc thảo luận về việc kết nối Fluent NHibernate và FluentMigrator nhưng nó sẽ có rất nhiều công việc. Nó sẽ cho phép giàn giáo để tạo ra những thay đổi đối với mô hình như EF Code Đầu tiên di cư làm. Nó không phải trên lộ trình vào lúc này.

Khi nhibernate/fluent phụ trách tạo cơ sở dữ liệu, tôi không nhất thiết phải xác định mọi khía cạnh của bảng. Nó được thực hiện hoặc thông qua quy ước hoặc thông qua các tập tin bản đồ. Với những người di cư I sẽ cần xác định mức độ chi tiết này?

Có, bạn sẽ cần xác định ở cấp chi tiết đó. Di chuyển của FluentMigrators là một DSL (ngôn ngữ riêng của mình) để xác định các thay đổi lược đồ được dịch sang sql. Bạn có thể viết sql trực tiếp cũng như sử dụng biểu thức Execute.Sql. Sự di chuyển của Entity Frameworks có kiểu tích hợp đó có cả ưu và nhược điểm.

Kiểm tra wiki hoặc một trong các hướng dẫn here, here (phần 1) hoặc here (phần 2) để được trợ giúp thêm về cách bắt đầu.