2010-01-11 9 views
7

Tôi đã từng làm việc với thư viện lập bản đồ dữ liệu tùy chỉnh và tôi đang cố gắng chuyển sang giải pháp ORM phổ biến hơn.Giải pháp ORM .NET với lớp tự động tạo: Subsonic, Castle AR, ...?

Sau một số thử nghiệm, tôi hoàn thiện các yêu cầu của tôi như sau:

  • thể tạo ra các lớp học sử dụng được từ giản đồ cơ sở dữ liệu (hỗ trợ SQL Server là đủ),
  • hỗ trợ cho mô hình ActiveRecord,
  • programmaticaly có thể định cấu hình (thông qua mã hoặc thuộc tính, không có tệp HBM),
  • miễn phí.

Bạn có thể giới thiệu một câu hỏi không?


Cho đến nay tôi đã cố gắng:

cận âm 3,0

Người Tôi hiện giống như hầu hết, vì nó cảm thấy như một sự cân bằng tốt giữa tính năng và sự đơn giản.

Những gì tôi không thích:

  • sử dụng IQueryable <> và tên số nhiều cho cả hai đầu của một-nhiều mối quan hệ - điều đó dường như khá phản trực giác đối với tôi;
  • tạo một tệp cho tất cả các lớp - như một nghìn dòng trên mỗi lớp, tôi có cảm giác xấu về các tệp mã là lớn;
  • Xử lý T4 được gọi tự động, do đó, cơ sở dữ liệu với lược đồ cập nhật phải luôn sẵn có.

Castle ActiveRecord

CastleAR với ActiveWriter add-in là hầu hết những gì tôi cần, nhưng mã ActiveWriter là không hoàn hảo (có vẻ như, Nullable <> properties không được hỗ trợ, và mặc định one-to -many implementation không hoạt động) và tôi không thể tìm cách sửa mã này theo cách thủ công.

Darkside GeneratorStudio tạo ra các định nghĩa mã đúng hơn, một tệp cho mỗi thực thể - mặc dù nó sử dụng các tên bí ẩn như RefclassIdRefclass. Cá nhân tôi thích Studio addin hơn ứng dụng độc lập, nhưng điều này chắc chắn là một vấn đề nhỏ.

Có khoảng 20 tệp được phân phối trong bản phân phối CastleAR; mặc dù không phải là một vấn đề của chính nó, nó cảm thấy như thừa cân. Tôi sẽ không cần quá nhiều kiến ​​thức bí truyền về NHibernate và các công cụ khác?

thành thạo NHibernate

rộng rãi đề nghị, nhưng tôi đã không thể tìm thấy một bộ tạo mã cho nó.

Tôi đã bỏ lỡ điều gì đó quan trọng?

+2

VladV, vui lòng liên hệ với tôi qua e-mail qua trang web Capprime của tôi.Tôi có giải pháp chất lượng alpha không công khai có thể đáp ứng nhu cầu của bạn. –

Trả lời

1

một vài suy nghĩ về những điều bạn không thích về cận âm:

  • sử dụng IQueryable <> và tên số nhiều cho cả hai đầu của một-nhiều mối quan hệ - điều đó dường như thay vì phản trực giác với tôi;

Đúng, tôi đồng ý điều này rất trực quan và tôi chưa bao giờ hiểu được lý do tại sao theo cách đó, nhưng bạn có thể dễ dàng sửa đổi các mẫu để sửa lỗi này.

  • tạo một tệp cho tất cả các lớp - như một nghìn dòng mỗi lớp, tôi có cảm giác xấu về các tệp mã quá lớn;

Bạn nghĩ điều này có thể gây ra sự cố nhưng tôi chưa gặp phải bất kỳ vấn đề nào và tôi chưa thấy một báo cáo nào được lưu trữ trên stackoverflow.

  • Xử lý T4 được gọi tự động, do đó, cơ sở dữ liệu với lược đồ cập nhật phải luôn sẵn sàng.

Nó chỉ được gọi tự động nếu bạn chỉnh sửa tệp t4 vì vậy thực sự bạn chỉ cần một lược đồ cập nhật khả dụng khi bạn thực hiện thay đổi đối với mẫu.

+0

Cảm ơn, tôi chưa thử nghiệm nhiều với thao tác các mẫu. Xử lý T4 cũng được gọi khi tải dự án. Tôi không chắc nó có thể tái tạo 100%, nhưng tôi đã từng thấy mẫu Subsonic không thành công do máy chủ không có sẵn * sau khi * tệp CS hiện có đã bị xóa, do đó các định nghĩa lớp đã bị xóa và không được tạo lại. – VladV

+1

Bạn có chắc chắn nó chạy trên tải dự án - tôi chưa bao giờ có kinh nghiệm này. Có lẽ tôi đã luôn luôn có một cơ sở dữ liệu ở đó ...? – Doug

+0

Tôi đã sai, nó thường không chạy trên tải dự án. Tôi nghĩ rằng tôi đã thấy nó trước đây, nhưng không thể tái tạo. – VladV

3

NHibernate không tuân theo mẫu bản ghi đang hoạt động, nó tuân theo mẫu kho lưu trữ.

Mục tiêu của FluentNHibernate là kết thúc của việc cần duy trì các tệp ánh xạ, tạo mã v.v. Nó hỗ trợ định nghĩa tương đương C# tương đương với các tệp HBM NHibernate, rất đẹp và dễ bảo trì hơn XML. . Nếu cơ sở dữ liệu của bạn được thiết kế với các quy ước được xác định rõ ràng, FNH có thể được cấu hình để nó tạo bản đồ chính xác của tất cả các đối tượng miền của bạn một cách chính xác cho cấu trúc cơ sở dữ liệu của bạn.

Nếu bạn quan tâm nhiều hơn trong việc thiết kế cơ sở dữ liệu và có mà dictate mô hình tên miền của bạn (điều này sẽ làm cho tôi cảm thấy rất bẩn) có một câu hỏi ở đây dành cho NHibernate Generators

trả lời để bình luận của bạn: NHibernate bản thân nó không làm thay đổi cơ sở dữ liệu, tuy nhiên có một lớp tiện ích được gọi là SchemaExport cung cấp một phương thức factory được gọi là Create. Bạn có thể sử dụng điều này để tạo ra các câu lệnh SQL mà nó sẽ thực hiện để tạo cơ sở dữ liệu của bạn theo cách NHibernate nhìn thấy cấu trúc quan hệ của bạn. Và có thể tùy chọn chạy trực tiếp với cơ sở dữ liệu hoặc ghi vào bàn điều khiển.

Tiện ích này rất hữu ích cho việc tạo thế hệ miền của bạn vào cơ sở dữ liệu của bạn, hiện tại tôi đang viết cơ sở dữ liệu cho tất cả phát triển ứng dụng mới của mình như thế nào. Tôi vẫn đang nghiên cứu cách tìm ra cách tốt nhất để duy trì các phiên bản của cơ sở dữ liệu. Kịch bản trường hợp xấu nhất sẽ chỉ là SC đầu ra sql và yêu cầu các chú thích cho mỗi dòng thay đổi lược đồ để có các báo cáo cập nhật/xóa cụ thể để đạt được kết quả. Điều này sẽ giúp bạn dễ dàng chuyển tiếp/lùi về phiên bản hoặc chỉ thực thi toàn bộ tập lệnh để làm cho db từ đầu.

Nếu bạn hoàn toàn là lập bản đồ ngược, cần có các công cụ để tạo HBM tương ứng mà cơ sở dữ liệu của bạn cần ánh xạ tới các lớp tương đương (tức là nếu bạn đã viết các lớp đó ban đầu trong mô hình miền của mình giản đồ của cơ sở dữ liệu hiện tại của bạn)

+0

Liệu FNH tự động ánh xạ có nghĩa là tôi phải duy trì mô hình miền và cơ sở dữ liệu riêng biệt, hay nó sẽ thay đổi cơ sở dữ liệu cho tôi? Tôi cảm thấy khó chịu về việc sửa đổi cơ sở dữ liệu tự động, vì tôi không thấy nó có thể được hỗ trợ một cách an toàn như thế nào (nói rằng, nếu có một số cấu hình - dev, test, production - với các phiên bản khác nhau của ứng dụng, và ứng dụng được phép thay đổi lược đồ db, sau một thời gian có thể sẽ có một mớ hỗn độn trong cơ sở dữ liệu). – VladV

+0

Cảm ơn bạn đã liên kết, nhưng hầu hết các máy phát điện đang tạo ra các ánh xạ XML, mà tôi đang cố gắng tránh. – VladV

+1

Đã thêm thông tin vào câu trả lời của tôi và tất cả các trình tạo NH sẽ tạo các tệp ánh xạ HBM (XML). FNH là một cấu trúc nằm trên đỉnh của HBM để tránh phải tự mình viết HBM. Theo hiểu biết của tôi hiện tại không có công cụ nào để ánh xạ trực tiếp HBM tới ánh xạ FNH –

0

Tôi tự hỏi liệu SubSonic 2.2 cũ hơn có phù hợp hơn với yêu cầu của bạn không? Nó tạo ra các lớp riêng lẻ cho mỗi bảng, chỉ tái tạo khi bạn yêu cầu nó và hỗ trợ mẫu ActiveRecord. Xem thêm chi tiết trong tài liệu tại http://subsonicproject.com/docs/Main_Page

+0

Cảm ơn ý tưởng này, tôi sẽ thử. Mặc dù, nhà phát triển SubSonic khuyến cáo sử dụng 3.0 cho các dự án mới - cá nhân, tôi cảm thấy rằng LINQ hỗ trợ là quá tốt đẹp một tính năng để biến đi. – VladV

1

Chúng tôi sử dụng CodeSmith để tạo mã và có thể đánh giá cao công cụ này như một công cụ tạo.

Nếu bạn nhìn vào CodeSmith, nó hỗ trợ nhiều mẫu đối tượng ORM/Business Object khác nhau.

Chúng tôi đã thực hiện các mẫu CSLA của riêng mình (xem http://www.lhotka.net/) một vài năm trước đây để nắm bắt được với CSLA không chỉ là ORM. CSLA rất tuyệt vời và hoạt động rất tốt và có khả năng mở rộng cao. Bây giờ chúng ta đã tạo ra khung công tác của riêng mình và loại bỏ khung công tác CSLA cốt lõi vì chúng ta không cần tất cả các tính năng và làm cho mọi thứ trở nên nhẹ hơn một chút.

+0

Thật không may, chúng tôi không có ngân sách cho CodeSmith ngay bây giờ. Tôi sẽ xem CSLA, mặc dù nó trông như một thứ khá nặng; Cảm ơn các liên kết. – VladV

+0

Tôi đã nghe nói rằng MyGeneration cũng rất tốt, miễn phí của nó (tôi không sử dụng nó tho) –

+0

CSLA là không thực sự, cũng không cố gắng để máy chủ như, một ORM. –

2
  • thể tạo ra các lớp học sử dụng được từ giản đồ cơ sở dữ liệu (SQL Server hỗ trợ là đủ),
  • hỗ trợ cho mô hình ActiveRecord,
  • programmaticaly cấu hình (thông qua mã hoặc các thuộc tính, không tạo các file HBM), miễn phí.
  1. LINQ-to-SQL autogenerates từ database schema. Một vấn đề lớn là tên thuộc tính là chữ thường nên bạn cần một công cụ như this one để đổi tên chúng. It isn't restricted to SQL Server.

  2. It sort of supports the ActiveRecord pattern - rất gần.

  3. Các lớp này có thể định cấu hình thông qua tệp dbml mà chỉ đơn giản là tệp XML. Visual Studio tạo một tệp designer.cs cho phép bạn thêm vào các đối tượng mà nó tạo ra khi chúng được sản xuất dưới dạng các lớp partial.

Một vài người khác để có một cái nhìn tại bên cạnh NH và cận âm:

  • Lightspeed - miễn phí cho trẻ dưới 8 đơn vị, liên kết cho thấy một số mã ví dụ. Bạn phải xác định ánh xạ từ các bảng đến các lớp học thông qua một giao diện mặc dù vậy nó không đáp ứng 1)
  • LLBlgen - nó không miễn phí
+1

+1 cho Linq-to-SQL – KristoferA

0

Về trước bài csvn không phải là một ORM (Bạn làm ánh xạ từ DB cho đối tượng kinh doanh của bạn theo cách thủ công). CSLA, NHibernate, subsonic vv không hỗ trợ mẫu bản ghi hoạt động.

Nếu bạn đang xem xét Khung không hỗ trợ mẫu Bản ghi đang hoạt động thì tôi sẽ xem xét Habanero (http://www.habanerolabs.com/) đây là nguồn mở và cho phép bạn xây dựng Đối tượng kinh doanh của mình thông qua cấu hình XML hoặc qua mã. Habanero lớn hơn nhiều so với ORM và có hỗ trợ tên miền phong phú (Business Object) với mô hình đối tượng mạnh mẽ để đại diện cho đối tượng Miền của bạn (Đối tượng kinh doanh).