5

Tôi có một bảng cơ sở dữ liệu mà tôi không thể thay đổi, trong đó có dữ liệu như:thành thạo NHibernate - Flatten nhiều hàng vào một thực thể duy nhất

FooTable 
Id  | EntityAUniqueId | EntityBUniqueId | EntityCUniqueId 
============================================================ 
1  | A1    | B1    | C1 
2  | A1    | B1    | C2 
3  | A1    | B2    | C3 
4  | A1    | B2    | C4 
5  | A2    | B3    | C5 
6  | A2    | B3    | C6 
7  | A2    | B4    | C7 
8  | A2    | B4    | C8 

Tôi muốn bản đồ này để cấu trúc sau:

interface IEntityA 
{ 
    string UniqueId { get; } 
    IEnumerable<IEntityB> { get; } 
} 

interface IEntityB 
{ 
    string UniqueId { get; } 
    IEnumerable<IEntityC> { get; } 
} 

interface IEntityC 
{ 
    string UniqueId { get; } 
} 

class EntityA : IEntityA { ... } 
class EntityB : IEntityB { ... } 
class EntityC : IEntityC { ... } 

Dữ liệu ở trên sẽ dẫn đến các đối tượng sau bị kéo:

EnityA(A1) 
    |-EnityB(B1) 
    | |-EntityC(C1) 
    | |-EntityC(C2) 
    |-EnityB(B2) 
     |-EntityC(C3) 
     |-EntityC(C4) 
EnityA(A2) 
    |-EnityB(B3) 
    | |-EntityC(C5) 
    | |-EntityC(C6) 
    |-EnityB(B4) 
     |-EntityC(C7) 
     |-EntityC(C8) 

Hiện tại tôi chỉ cần ghi vào bảng không đọc.

Tôi đang sử dụng FluentNHibernate với Tự động lập bản đồ và quy ước.

Tôi bắt đầu đi xuống con đường của Linh kiện nhưng nhận ra rằng đây không phải là những gì họ đã dự định. Một giải pháp có thể là sử dụng ba khung nhìn trên bàn nhưng điều này bổ sung thêm các vấn đề khác và tôi muốn tránh nó nếu có thể và tôi không thể cảm thấy rằng phải có một cái gì đó đã có trong khuôn khổ để giải quyết vấn đề này.

Nếu giao diện gây nhầm lẫn cho câu trả lời, vui lòng bỏ qua chúng khỏi giải pháp.

+0

không chắc chắn những gì bạn muốn đạt được ở đây; bạn có thể giải thích tại sao bạn có bộ sưu tập EntityA/B/C không? theo ví dụ của bạn có vẻ như mỗi UniqueId có chính xác một hàng dữ liệu được kết nối với nó. hoặc có các bảng khác không được đề cập ở đây? –

+0

@sJhonny Tôi đã cập nhật câu hỏi – Bronumski

Trả lời

1

Vì vậy, bạn có dữ liệu không chuẩn hóa trong bảng của mình. Tôi không biết cách xử lý nó với loại ánh xạ mà bạn đang yêu cầu. Tôi có thể nghĩ đến 2 giải pháp thay thế.

1) Tạo chế độ xem trong cơ sở dữ liệu để chuẩn hóa dữ liệu của bạn và tạo ánh xạ đối với các chế độ xem đó. Lần như

ViewEntityA 
----------- 
IdColumn: EntityAUniqueId 
AnyDataColumns 

ViewEntityB 
----------- 
IdColumn: EntityBUniqueId 
FkColumn: EntityAUniqueId 
AnyDataColumns 

ViewEntityC 
----------- 
IdColumn: EntityCUniqueId 
FkColumn: EntityBUniqueId 
AnyDataColumns 

Sau đó bạn có thể viết xem chèn/cập nhật/xóa Logic kích hoạt (Reference1, Reference 2) để xử lý cập nhật NHibernate.

2) Ánh xạ bảng như vậy. Ánh xạ thủ công vào phân cấp đối tượng .net trong C#. Cập nhật tất cả các bảng cơ sở dữ liệu mà không sử dụng các mối quan hệ thực thể của NHibernate.

+0

Đã lâu rồi kể từ khi tôi đăng bài này và tôi không còn làm việc tại công ty nữa. Tôi nghĩ rằng chúng tôi đã sử dụng một cái gì đó tương tự như tùy chọn 2 nhưng xem sẽ có được một công việc phù hợp xung quanh mặc dù tôi đã thực sự cho một bản đồ Fluent NHibernate bản địa. – Bronumski

Các vấn đề liên quan