2009-03-06 24 views
10

Tôi đang tạo (thực sự, tạo lại) một ứng dụng có người dùng hiện tại và dữ liệu khác trong cơ sở dữ liệu MS-Access. Dữ liệu sẽ được chuyển đến SQL Server và một phần trong đó liên quan đến việc di chuyển người dùng. Tôi muốn sử dụng EF để làm ORM, và tôi khá chắc chắn tôi biết những gì các mô hình dữ liệu sẽ được trong SQL Server. Tôi mới vào EF nhưng không phải ASP.NET, và tôi muốn tận dụng lợi thế của các tính năng thành viên trong ASP.NET. Tôi đang suy nghĩ về một số cách để làm điều này và muốn một số lời khuyên. Tôi đã thực hiện chỉ một ít nghiên cứu về ý tưởng này cho đến nay, có lẽ nó đã được trả lời ở nơi khác. Vì vậy, ở đây đi một cụm câu hỏi liên quan.Tôi có thể sử dụng Entity Framework với ASP.NET Membership không?

  1. EF có thể làm việc trực tiếp với ASP.NET Membership thông qua một số lớp hoặc không gian tên mà tôi không biết?

  2. Nếu tôi chuyển người dùng sang hệ thống thành viên, để căn chỉnh người dùng của họ với dữ liệu trong các bảng khác, tôi có nên tạo một bộ bảng khác cho dữ liệu người dùng trên đỉnh aspnet_ * tables a la DotNetNuke không?

  3. Tôi muốn tránh tình huống mà tôi sử dụng chức năng thành viên được tích hợp để chỉ xác thực người dùng và chuyển sang ngữ cảnh EF khi tôi đang làm việc với dữ liệu được gắn thẻ người dùng. Dường như vụng về để rút thông tin người dùng để liên kết với một cột trong GridView bằng cách truy cập vào một thành viên người dùng cho mỗi hàng, nhưng có lẽ đó là những gì cần thiết? Tôi có cần phải hút nó lên và nhân rộng các lớp thành viên trong EF cho mục đích truy xuất dữ liệu không?

  4. Tôi đã nghĩ đến việc có thể triển khai một số nhà cung cấp EF cho tư cách thành viên, theo ý tưởng rằng có thể nhà cung cấp có thể ngồi bên trong mô hình dữ liệu EF tổng thể. Đây có phải là cuộc nói chuyện điên rồ không? (Tôi chưa từng viết nhà cung cấp của mình trước đây)

Hãy cho tôi biết tôi không có ý nghĩa gì cả.

Trả lời

5

Tại sao bạn không làm theo cách khác? Bạn có thể thực hiện nhà cung cấp thành viên của riêng bạn cho asp.net, sử dụng mô hình bạn muốn/cần.

Nếu các tính năng bạn cần không hoàn toàn phù hợp với việc cài đặt thành viên asp.net được tích hợp sẵn, bạn chỉ có thể cuộn nhà cung cấp của riêng mình. Nếu bạn sẽ chỉ sử dụng một vài tính năng, bạn sẽ phải thực hiện chỉ một vài phương thức (bạn không phải điền vào thực hiện cho tất cả các phương thức). Nếu bạn cần nhiều tính năng hơn hỗ trợ, sử dụng nhà cung cấp thành viên có thể bị cản trở.

+0

Nếu tôi làm điều đó, nó có thể được xếp gọn gàng trong các lớp EF/EDM không?Tôi đoán những gì tôi yêu cầu là, bạn có nghĩ rằng tôi có thể cuộn một nhà cung cấp như thể EF là phụ trợ thay vì cơ sở dữ liệu? Ngoài ra, nó là lớp cơ sở dữ liệu hoặc lớp web/UI thực hiện các công cụ như băm? – oasasaurus

+0

có, bạn thực hiện các phương pháp liên quan đến các tính năng bạn cần, với nhiều mã bạn muốn bên trong, ví dụ: ado.net, linq2sql, EF, [chèn bất kỳ ORM], gọi một dịch vụ web, bất cứ điều gì bạn cần – eglasius

+0

trở thành lớp giao diện người dùng web, không phải là nó thực sự buộc bạn làm điều đó. Lớp MembershipProvider cơ sở có một số phương thức để mã hóa/giải mã, mặc dù tôi phải nói rằng tôi đã không sử dụng chúng trên nhà cung cấp tùy chỉnh của tôi. – eglasius

2
  1. Chúng tôi làm, nhưng chúng tôi không lập bản đồ các bảng thành viên. Bạn không nên giả sử sử dụng nhà cung cấp thành viên SQL.
  2. Chúng tôi ánh xạ danh tính người dùng, không phải là id DB. Tinh tế, nhưng quan trọng. Một lần nữa, hãy nhớ rằng có các nhà cung cấp thành viên khác (ví dụ: xác thực tên miền).
  3. Bạn có thể làm rõ câu hỏi không? Bạn sẽ không cần phải sao chép tất cả thông tin thành viên trong mô hình EF của bạn, nhưng bạn sẽ cần một danh sách các danh tính đã biết.
  4. Không, không hề điên rồ, nhưng khó khăn và có lẽ không cần thiết.
+0

Làm rõ trên # 3: Giả sử tôi muốn lập hồ sơ dữ liệu từ bảng dữ liệu do người dùng nhập và một trong các trường tôi muốn hiển thị là email của người dùng mà tất nhiên không có trong bảng đó. Tôi có cần các lớp người dùng EF có thuộc tính Email không? Tôi có phải lặp qua từng hàng và gọi Memberhip.GetUser không? – oasasaurus

+0

Nếu bạn muốn một giải pháp sẽ làm việc với bất kỳ nhà cung cấp thành viên nào, dù là dựa trên SQL hay không, thì bạn cần phải làm những gì bạn đề xuất hoặc sao chép tư cách thành viên vào cơ sở dữ liệu của bạn và ánh xạ bảng nhân bản. –

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