2013-04-25 27 views
8

Khi tôi lập trình bằng LINQ với tệp .dbml, chỉ có một ngữ cảnh. Nhưng, khi tôi làm một trang MVC, có vẻ như tôi có những ngữ cảnh riêng biệt cho mỗi thực thể (đó là cách mà hướng dẫn MVC chỉ cho tôi cách thực hiện nó, với ngữ cảnh "phim").Tại sao có nhiều lớp DbContext?

tôi có:

public class AccountsContext : DbContext 
{ 
    public AccountsContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<Account> Accounts { get; set; } 
} 

Và, tôi có:

public class ClientsContext : DbContext 
{ 
    public ClientsContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<Client> Clients { get; set; } 
} 

Khi tôi gọi này, tôi phải tạo ra bối cảnh riêng biệt, như:

private AccountsContext db = new AccountsContext(); 
private ClientsContext clientsContext = new ClientsContext(); 

... Đó là cả hai gây phiền nhiễu, và nó có vẻ dư thừa kể từ khi tôi biết rằng khi tôi sử dụng LINQ, tôi chỉ phải nhanh chóng một đối tượng cơ sở dữ liệu duy nhất.

Có cách nào để chỉ sử dụng một ngữ cảnh và được khuyến nghị này không?

Trả lời

12

Không được có bất kỳ điều gì ngăn bạn sử dụng một ngữ cảnh. Cơ sở dữ liệu và công cụ được sử dụng để truy cập nó, phải hoàn toàn độc lập với bất kỳ thứ gì bên ngoài nó (logic nghiệp vụ, tầng dịch vụ, giao diện người dùng, v.v ...).

Số lượng ngữ cảnh hoặc cách bạn sử dụng chúng, không được thay đổi dựa trên công nghệ của khách hàng của bạn.

Điều gì về MVC dẫn bạn tin rằng bạn sẽ cần nhiều hơn một ngữ cảnh? Và điều gì ngăn cản bạn làm như vậy?

Nếu bạn nghĩ rằng bạn cần sử dụng ngữ cảnh cho từng thực thể, vì mẫu theo cách đó, bạn không cần. Chỉ cần sử dụng một ngữ cảnh.

Nếu nó giúp, đây là những gì một bối cảnh đơn giản trông giống như với nhiều hơn một thực thể:

public partial class abook_dbEntities : DbContext 
{ 
    public abook_dbEntities() 
     : base("name=abook_dbEntities") 
    { 
    } 

    public DbSet<Entity> Entities { get; set; } 
    public DbSet<Contact> Contacts { get; set; } 
} 

Nếu nó giúp, một dòng chảy kinh doanh điển hình trông như thế này:

UI -> Bộ điều khiển -> Logic nghiệp vụ -> Truy cập dữ liệu -> Cơ sở dữ liệu

Ngữ cảnh dữ liệu của bạn sẽ đi vào lớp dữ liệu. Logic của bạn sẽ đi vào lớp logic nghiệp vụ của bạn.

+5

Ví dụ về Phim MVC cụ thể và cố ý sử dụng nhiều ngữ cảnh. http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-model. Tại sao, tôi không biết. Có lẽ chỉ để minh họa rằng nó có thể làm như vậy. Nó có thể là một điều mong muốn để làm cho các ứng dụng rất lớn; bạn có thể tạo một bối cảnh cho mỗi bộ phận của một tập đoàn, hoặc có lẽ mỗi cơ sở dữ liệu vật lý. –

+0

Bạn có biết nếu có lý do chính đáng cho điều đó không? Vì vậy, có lẽ OP đang nghĩ rằng nó phải được thực hiện theo cách đó, bởi vì ví dụ đó? –

+0

Đó sẽ là dự đoán của tôi. –

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