13

Tôi đang làm theo cách tiếp cận cơ sở dữ liệu trước; Tôi đã tạo ra các bảng trong cơ sở dữ liệu SQL Server 2008 của mình, sau đó tôi ánh xạ các bảng đó tới các lớp khung Entity bằng cách sử dụng một mô hình dữ liệu thực thể ADO.NET. Nhưng khi tôi mở tập tin designer.cs tôi thấy đoạn mã sau trong định nghĩa lớp được tạo ra tự động:Tại sao Entity Framework tự động sử dụng ObjectContext thay vì DbContext khi ánh xạ các bảng cơ sở dữ liệu bằng cách sử dụng ADO.NET Entity datamodel

public partial class PortalEntities : ObjectContext 

vì vậy tôi đã sau ba câu hỏi đó bị lẫn lộn của tôi:

  1. Tại sao sao lớp học PortalEntities của tôi xuất phát từ ObjectContext và không phải DbContext như tôi mong đợi?

  2. Có một sự khác biệt lớn giữa ObjectContext & DbContext, hoặc họ chủ yếu là giống nhau và cung cấp cùng khả năng

  3. Khi tôi cố gắng viết một cái gì đó tương tự như đoạn mã sau:

    Student student = db.Students.Find(id); 
    

Tôi thấy rằng tôi không thể sử dụng phương pháp .Find() như tôi đã từng sử dụng DbContext, do đó, điều này có nghĩa là ObjectContext & DbContext có các phương pháp khác nhau mà tôi có thể sử dụng?

BR

Trả lời

24

Các DbContext là một wrapper quanh ObjectContext mà đơn giản hóa giao diện cho những điều chúng ta làm nhất.

Nếu bạn có một DbContext bạn vẫn có thể truy cập vào ObjectContext máng ((IObjectContextAdapter)dbContext).ObjectContext;

Nếu bạn muốn sử dụng DbContext thay vì ObjectContext khi sử dụng cơ sở dữ liệu đầu tiên, bạn có thể chuyển đổi các mẫu được sử dụng để tạo mã của bạn. Bạn có thể làm điều này bằng cách nhấp chuột phải vào EDMX của bạn và chọn 'Thêm mục tạo mã'. Sau đó bạn có thể chọn mẫu DbContext.

Here is an example toàn bộ quá trình.

+0

cảm ơn câu trả lời của bạn; nhưng tôi sẽ được hưởng lợi từ việc sử dụng DbContext thay vì ObjectContext trong apprach cơ sở dữ liệu của tôi đầu tiên? –

+4

DbContext có giao diện đơn giản. Nó sẽ dễ sử dụng hơn và nếu cần thiết, bạn luôn có thể truyền nó đến một ObjectContext. Ngoài ra, DbContext còn dễ dàng hơn cho các mục đích thử nghiệm đơn vị. –

+0

Giải thích rõ ràng! Cảm ơn – GibboK

0

Vì VS2012 việc tạo mã mặc định đã thay đổi từ ObjectContext thành DbContext.

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