Read-only archive. Login and posting are unavailable.
Reply
 
Thread Tools
  #1  
Old 27-12-2019, 14:39
Senior Member
Join Date: 12-2012
Posts: 153
Cách truy vấn nhiều database trong entity framework

Mình đang gặp vde về chuyện join 2 bảng thuộc 2 database khác nhau. Khi dùng ef thì nó báo không không support trường hợp này. Hiện tại mình đang xử lý theo kiểu viết sql trực tiếp trong hàm SqlQuery, nhưng có vẻ tù quá. Trên mạng thì cũng thấy 1 cách là merge 2 edmx của 2 db lại, nhưng mà cách này cũng hơi bất tiện, mỗi lần thêm sửa xoá edmx lại phải sửa cả file merged.
Ae nào có kinh nghiệm chỉ giúp mình giải pháp ngon bổ rẻ với.
Reply With Quote
  #2  
Old 27-12-2019, 15:40
dreamnight's Avatar
Senior Member
Join Date: 06-2008
Posts: 639
Re: Cách truy vấn nhiều database trong entity framework

Quote:
Originally Posted by hungnt03 View Post
Mình đang gặp vde về chuyện join 2 bảng thuộc 2 database khác nhau. Khi dùng ef thì nó báo không không support trường hợp này. Hiện tại mình đang xử lý theo kiểu viết sql trực tiếp trong hàm SqlQuery, nhưng có vẻ tù quá. Trên mạng thì cũng thấy 1 cách là merge 2 edmx của 2 db lại, nhưng mà cách này cũng hơi bất tiện, mỗi lần thêm sửa xoá edmx lại phải sửa cả file merged.
Ae nào có kinh nghiệm chỉ giúp mình giải pháp ngon bổ rẻ với.
Có vẻ bạn đang có lỗi nghiêm trong trong thiết kế database rồi, mặc dù RDBMS cho phép bạn làm vấn đề này nhưng nó chỉ là giải pháp chấp vá mà thôi vì cross database nghĩa là bạn đang truy vấn dữ liệu trên 2 hệ thống khác nhau. Entity Framework hiện tại không hỗ trợ bạn vấn đề này (và hầu hết ORM đều không nốt) vì nó đi sai với định nghĩa DbContext. DbContext của EF cho phép bạn khai báo toàn bộ các mối quan hệ giữa các classes và tables trong một database mà thôi. Sử dụng ad-hoc query để execute là chấp nhận trong trường hợp của bạn và không có cách nào tốt hơn cả. Nếu cảm thấy phiền toái trong việc dùng EF để map câu raw sql đó thì bạn có thể dùng dapper để execute và map kết quả cho bạn.
Reply With Quote
  #3  
Old 28-12-2019, 06:20
Senior Member
Join Date: 12-2012
Posts: 153
Re: Cách truy vấn nhiều database trong entity framework

Quote:
Originally Posted by dreamnight View Post
Có vẻ bạn đang có lỗi nghiêm trong trong thiết kế database rồi, mặc dù RDBMS cho phép bạn làm vấn đề này nhưng nó chỉ là giải pháp chấp vá mà thôi vì cross database nghĩa là bạn đang truy vấn dữ liệu trên 2 hệ thống khác nhau. Entity Framework hiện tại không hỗ trợ bạn vấn đề này (và hầu hết ORM đều không nốt) vì nó đi sai với định nghĩa DbContext. DbContext của EF cho phép bạn khai báo toàn bộ các mối quan hệ giữa các classes và tables trong một database mà thôi. Sử dụng ad-hoc query để execute là chấp nhận trong trường hợp của bạn và không có cách nào tốt hơn cả. Nếu cảm thấy phiền toái trong việc dùng EF để map câu raw sql đó thì bạn có thể dùng dapper để execute và map kết quả cho bạn.
hệ thống e làm nó tổng hợp dữ liệu từ các hệ thống nhỏ hơn để trích xuất ra report, các thứ đã có sẵn, nên là k được sửa gì ở phía db. Cảm ơn a đã có những góp ý quý báu.
Reply With Quote
  #4  
Old 28-12-2019, 07:46
ez-aqua's Avatar
Member
Join Date: 11-2013
Posts: 54
Re: Cách truy vấn nhiều database trong entity framework

Cho mình hỏi ngu một chút, không hiểu mình có hiểu vấn đề của bạn đúng không, nhưng mình nghĩ là bạn có thể join bảng trên tầng C# application được mà nhi. Bạn load các dữ liệu cần thiết của cả 2 bảng lên C#, rồi dùng LinQ join trên C# được mà nhỉ.

Còn có cách khác là integrate hết các dữ liệu từ nhiều database của các hệ thống nhỏ hơn khác nhau về một mối, và cái mối đó gọi là... data warehouse. 1355308
Reply With Quote
  #5  
Old 28-12-2019, 09:16
dreamnight's Avatar
Senior Member
Join Date: 06-2008
Posts: 639
Re: Cách truy vấn nhiều database trong entity framework

Quote:
Originally Posted by ez-aqua View Post
Cho mình hỏi ngu một chút, không hiểu mình có hiểu vấn đề của bạn đúng không, nhưng mình nghĩ là bạn có thể join bảng trên tầng C# application được mà nhi. Bạn load các dữ liệu cần thiết của cả 2 bảng lên C#, rồi dùng LinQ join trên C# được mà nhỉ.

Còn có cách khác là integrate hết các dữ liệu từ nhiều database của các hệ thống nhỏ hơn khác nhau về một mối, và cái mối đó gọi là... data warehouse. 1355308
Ko đâu, ý bạn đó là ở sql server thực thi 1 câu truy vấn truy xuất dữ liệu trên 2 database khác nhau(nhưng cùng trên 1 sql server). Vd: Select * From . o join . j on o.id = j.orderid. Nên join câu đó trên application tức là phải truy xuất database 2 lần và join in-memory ở tầng ứng dụng thì nó ngốn ram dữ lắm. Trừ trường hợp bạn đó hiểu rõvmệnh đề Where của mình lấy tối đa mỗi bảng bao nhiêu records thi ok
Reply With Quote
  #6  
Old 28-12-2019, 18:37
Member
Join Date: 10-2011
Posts: 68
Re: Cách truy vấn nhiều database trong entity framework

Quote:
Originally Posted by ez-aqua View Post
Còn có cách khác là integrate hết các dữ liệu từ nhiều database của các hệ thống nhỏ hơn khác nhau về một mối, và cái mối đó gọi là... data warehouse. 1355308
Ôi, mặt trời chân lý.
Em nghe từ warehouse nhiều lắm, mà cũng ếu hiểu nó là cái gì.
Đọc 1 câu giải thích của bác, hiểu ra chân lý luôn

Sent from Xiaomi Redmi Note 5 using vozFApp
Reply With Quote
  #7  
Old 31-12-2019, 14:54
Member
Join Date: 02-2017
Posts: 31
Re: Cách truy vấn nhiều database trong entity framework

mô hình cluster
Reply With Quote
  #8  
Old 01-01-2020, 21:17
cuoc_song's Avatar
Đã tốn tiền
Join Date: 03-2007
Posts: 2,742
Re: Cách truy vấn nhiều database trong entity framework

Nói không với việc join dữ liệu giữa các db khác nhau nhé. Bác nên tổng hợp dữ liệu về 1 db bằng ETL ( thằng db nào cũng hỗ trợ cái này) rồi mới thực hiện report hoặc pre compute.
Reply With Quote
  #9  
Old 06-01-2020, 16:51
netsstea's Avatar
Senior Member
Join Date: 04-2011
Posts: 249
Re: Cách truy vấn nhiều database trong entity framework

Quote:
Originally Posted by hungnt03 View Post
Mình đang gặp vde về chuyện join 2 bảng thuộc 2 database khác nhau. Khi dùng ef thì nó báo không không support trường hợp này. Hiện tại mình đang xử lý theo kiểu viết sql trực tiếp trong hàm SqlQuery, nhưng có vẻ tù quá. Trên mạng thì cũng thấy 1 cách là merge 2 edmx của 2 db lại, nhưng mà cách này cũng hơi bất tiện, mỗi lần thêm sửa xoá edmx lại phải sửa cả file merged.
Ae nào có kinh nghiệm chỉ giúp mình giải pháp ngon bổ rẻ với.
Theo kinh nghiệm của mình, thì bận tốt nhất là làm 1 aggregate service để merge 2 database vào 1, có thể move hết vào cùng 1 database, hoặc move hết vào elastic search, hoặc hbase. Sau đó thực hiện làm report trên đó là tiện nhất.
Còn như các bạn khác cũng nói rồi, EF ko làm được việc đó
__________________
Đang chờ build lại pc khác
Reply With Quote
Reply

« Previous Thread | Next Thread »

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


All times are GMT +7. The time now is 12:32.