6

tôi thấy nhận xét này trên MSDN (linklink):Hiệp hội độc lập EF4 - Tại sao nên tránh chúng?

"Lưu ý rằng hiệp hội độc lập thường nên tránh vì những thứ như N-Tier và đồng thời trở nên khó khăn hơn."

Tôi mới tham gia EF4 và tôi đang xây dựng một ứng dụng web n-Tier. Điều này nghe có vẻ như một cạm bẫy quan trọng. Ai đó có thể giải thích cho tôi điều này có nghĩa gì không?

Trả lời

7

Tôi nghĩ rằng đó là sở thích cá nhân. Ban đầu, EF được tạo ra để chỉ sử dụng indep. các liên kết và phù hợp với phương pháp ERM cổ điển hơn. Tuy nhiên, hầu hết chúng ta đều phụ thuộc vào FK mà nó làm cho cuộc sống trở nên rất phức tạp. Vì vậy, MS đã cho chúng tôi FK trong EF4 có nghĩa là không chỉ có FK như một tài sản trong thực thể phụ thuộc mà các mối quan hệ được xác định thông qua các ràng buộc trong mô hình khái niệm hơn là chôn trong ánh xạ. Vẫn còn một vài mối quan hệ mà bạn chỉ có thể xác định với một hiệp hội indep: nhiều mối quan hệ với nhiều khóa ngoại và duy nhất. Lưu ý rằng nếu bạn đang có kế hoạch sử dụng các Dịch vụ RIA (không giống như nó) thì RIA chỉ nhận ra các hiệp hội FK.

Vì vậy, nếu bạn muốn tận dụng các liên kết độc lập, bạn vẫn hoàn toàn có thể sử dụng chúng trong EF4. Họ hoàn toàn được hỗ trợ. Nhưng như James đã đề xuất, có thêm một vài bẫy để nhận thức được ... những thứ mà bạn sẽ cần phải làm rõ ràng hơn vì cách EF làm việc với các đồ thị đặc biệt. Hoặc trường hợp đó bạn chỉ muốn có FK đó, ví dụ: bạn có ID của khách hàng nhưng bạn không h ví dụ về trường hợp đó. Bạn có thể tạo một đơn đặt hàng nhưng không có thuộc tính FID tốt đẹp của CustomerID đó, bạn phải thực hiện thêm một số thao tác để có được CustomerID đó.

hth

3

Nếu bạn mới tham gia EF và bắt đầu với EF4 câu trả lời dễ dàng là bỏ qua điều này - bạn gần như chắc chắn sẽ sử dụng Hiệp hội khóa nước ngoài thay vì Hiệp hội độc lập.

Hiệp hội khóa ngoại được hỗ trợ bởi một mối quan hệ khóa ngoại trong cơ sở dữ liệu và mối quan hệ này được mô tả rõ ràng trong mô hình khái niệm. Loại hình liên kết này là mới đối với EF4 và tôi hiểu đó là một sự nhượng bộ theo những vấn đề mà mọi người có với các Hiệp hội độc lập.

Nếu bạn muốn tách lược đồ lưu trữ và lược đồ khái niệm (là loại EF), bạn sẽ không muốn lược đồ khái niệm của bạn biết về những thứ như khóa ngoài vì đây là cơ sở dữ liệu) khái niệm. Các phiên bản trước của EF theo cách tiếp cận này và chúng tôi có cái gọi là Hiệp hội độc lập.

Hãy suy nghĩ về các hiệp hội độc lập như các hiệp hội được theo dõi bởi EF mà không có kiến ​​thức về khóa ngoài cơ bản. EF vẫn hỗ trợ điều này nhưng họ có những điểm yếu đáng kể.

EF4 trong VS2010 sẽ sử dụng Khóa ngoại của bạn và tạo mối quan hệ Khóa ngoại trừ khi bạn nói cách khác. Trên toàn bộ công việc này như bạn mong đợi. Vẫn còn một số gotchas - ví dụ xung quanh việc xóa tầng.

Nếu bạn muốn tìm hiểu EF - Tôi có thể giới thiệu cuốn sách này:

http://learnentityframework.com/learnentityframework/

Mọi thứ bạn muốn biết, giải thích rất rõ ràng.

+1

Okeedoke. Nhưng những vấn đề cụ thể gây ra với n-tier và đồng thời là gì? – anon

+0

Vâng sự khác biệt chính khác với sự khác biệt lược đồ là một thực thể với một hiệp hội độc lập không lộ chìa khóa nước ngoài trong lớp khái niệm. Hiệp hội được duy trì trong một đối tượng riêng biệt. Tùy thuộc vào cách bạn thiết kế ứng dụng của mình, việc phức tạp hơn để truyền thông tin bổ sung này giữa các lớp là phức tạp hơn. Các hiệp hội khóa nước ngoài dễ dàng hơn nhiều khi bạn chỉ có thể đặt khóa ngoại trực tiếp trên thực thể - hoặc sửa đổi bộ thực thể/tổ chức có liên quan được phơi sáng. –

+0

"Ít dễ dàng để làm việc với" trong tâm trí của tôi không nhất thiết phải dịch để "tránh". Sau này cho thấy rằng có những cạm bẫy cụ thể. Có bài viết nào về những cạm bẫy này không? (Tôi có cuốn sách của Julia Lerman, BTW.) – anon