2016-09-19 14 views
6

Tôi trọng OnModelCreating, và trong phương pháp này có dòng base.OnModelCreating(modelBuilder);Là base.OnModelCreating (modelBuilder) có cần thiết không?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
} 

Nhìn vào mẫu mã và sách hướng dẫn về cách thực hiện điều này, tôi bị lẫn lộn như thời tiết tôi cần nó hay không. Đôi khi nó ở đó, đôi khi không. Đôi khi vào lúc bắt đầu của phương pháp, thời gian khác ở cuối.

Tôi nên làm gì với ứng dụng này?

Trả lời

3

Theo documentation, nó không quan trọng nếu bạn thừa hưởng trực tiếp từ lớp DbContext:

Phương pháp này được gọi khi mô hình cho một bối cảnh có nguồn gốc đã được khởi tạo, nhưng trước khi mô hình đã được bị khóa và sử dụng để khởi tạo ngữ cảnh. Việc cài đặt mặc định của phương thức này không có gì là, nhưng nó có thể được ghi đè trong lớp dẫn xuất sao cho mô hình có thể được cấu hình thêm trước khi nó bị khóa.

Nói cách khác, vì là không có gì theo định nghĩa, gọi base.OnModelCreating là không cần thiết, nhưng đồng thời sẽ không đau nếu gọi - đó là lý do tại sao Đôi khi nó ở đó, đôi khi không. Đôi khi vào lúc bắt đầu của phương pháp, thời gian khác ở cuối.

+0

tôi nhận được nó. Tuy nhiên, tại sao nó sẽ gọi nó khi nó không làm gì? Ý tôi là, tôi nhận được rằng việc ghi đè cung cấp cho modelBuilder trong đó chúng ta có thể đặt thêm các cấu hình. Nhưng tại sao cuộc gọi đến cơ sở? Hay nói cách khác, điều gì sẽ xảy ra với modelBuilder mà chúng ta truyền vào nó. Nghe có vẻ như vậy ... vô dụng :-) –

+0

Đó là vấn đề.Khi bạn có phương thức 'virtual' cơ sở, phải có một số tài liệu giải thích các yêu cầu gọi phương thức đó khi bạn ghi đè lên, như thể bạn cần gọi nó ở tất cả, nếu bạn cần gọi nó ngay từ đầu hoặc tại kết thúc. Ở đây tài liệu nói rằng phương pháp không làm gì cả, vì vậy không có yêu cầu - bạn có thể gọi nó ở bất kỳ nơi nào bạn ghi đè nếu bạn muốn hoặc bạn không thể gọi nó. Một khi bạn biết nó không có gì ** theo định nghĩa **, bạn có thể sẽ không gọi nó :) –

2

Ở đây những gì nói Pawel Kadluczka - MSFT ...

Tại thời điểm nó không thực sự quan trọng. Cả hai phương thức OnModelCreating và Seed không có bất kỳ triển khai nào (tức là các phần của các hàm đều trống) trong các lớp cơ sở của chúng. Do đó, việc gọi vào lớp cơ sở về cơ bản là một no-op. Tôi không nghĩ rằng có bất kỳ kế hoạch thay đổi nó (đặc biệt đối với phương pháp Seed - làm thế nào chúng ta sẽ biết những gì dữ liệu để đưa vào cơ sở dữ liệu)

Trong phương pháp bảo vệ nói chung có thể có một số thực hiện trong cơ sở lớp. Trong trường hợp đó, tùy thuộc vào nhà phát triển có nguồn gốc từ một lớp học như vậy để quyết định xem liệu anh ta có muốn tận dụng lợi thế của chức năng được cung cấp trong phương thức trong lớp cơ sở hay không. Nếu nhà phát triển nghĩ rằng họ chỉ muốn thêm một cái gì đó vào chức năng được cung cấp bởi phương thức trong lớp cơ sở, anh ta sẽ gọi vào phương pháp này. Nếu không, anh ta sẽ không gọi vào phương thức của lớp cơ sở và sẽ cung cấp tất cả các chức năng cần thiết trong phương thức trên lớp dẫn xuất.

tham khảo:Link

+0

Điều gì nói rằng một người (là MSFT hay không) thực sự không quan trọng. Điều quan trọng duy nhất là những gì nói ** tài liệu chính thức ** (và nếu nó sai, thì đó là một lỗi mà phải được báo cáo và cố định - dường như đây không phải là trường hợp ở đây). –

+0

hmm..both giống nhau ở đây: D @IvanStoev – Sampath

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