Chủ Nhật, 7 tháng 10, 2012

Thay đổi CSDL trong thời gian run-time khi làm việc với Castle ActiveRecord

Trong khoảng thời gian hơn 2 năm gần đây, khi làm việc với CSDL mềnh toàn dùng Castle ActiveRecord (vì nhiều lý do, tìm hiểu kỹ xem cái Castle ActiveRecord này là gì thì sẽ biết ngay và cũng sẽ hiểu hơn).

Sau hơn 2 năm, thì giờ bắt đầu phát sinh một nhu cầu khi lượng dữ liệu lớn lên, là: "Vẫn là đối tượng của Castle ActiveRecord đó nhưng về mặt dữ liệu thì có thể lưu ở nhiều CSDL khác nhau".

Thực sự là vấn đề rồi, vì Castle ActiveRecord lúc khởi động (initialize) đối tượng để tạo mapping với NHibernate thì đã chỉ ra class nào, dùng connection nào. Nghĩa là lúc run-time thì Castle ActiveRecord cần các thông tin này để fetch dữ liệu cũng như làm việc với máy chủ CSDL.

Sau một hồi loay hoay đi tìm (vấn đề muôn thủa của Open Source là tài liệu kém, cộng đồng thì đông dẫn tới hỏi và trả lời loạn xạ), thì đã tìm ra phương án: Sử dụng class DifferentDatabaseScope của namespace Castle.ActiveRecord.Framework.Scopes thì sẽ giải quyết được vấn đề này, mỗi cái lúc đó sẽ phải chú ý phần xử lý transaction đối với Create/Save/Update/Delete.

Đã ghi lại một số link để tham khảo:

Chia sẻ: