2012-02-02 13 views
9

Tôi đang tạo ứng dụng MVC 3 mới.
bước thực hiện:
1. Added mô hình mới bằng cách nhấp chuột phải vào mô hình và thêm "LINQ to SQL Classes"
2. bảng kéo từ Server Explorer để bố trí dbml mới của tôi và lưu
3. Nhấp chuột phải vào Controllers- > Add-> Bộ điều khiển
4. Nhập các thông tin sau:
MVC3 Thêm lỗi Giàn giáo điều khiển - Loại ngữ cảnh không được hỗ trợ

Controller name: UserController
Template: Controller with read/write actions and views, using Entity Framework
Model Class: aspnet_User (TierPay)
Data Context Class: AgricultureDataContext (TierPay)
Views: Razor (VBHTML)

5.Click Thêm
6.Get các lỗi sau:
Unsuppo loại ngữ cảnh bị rted.

Tôi đã tìm kiếm và không tìm thấy bất kỳ câu trả lời nào. Cảm ơn!

+0

tôi cũng gặp vấn đề tương tự. Đối với một số lý do bối cảnh dữ liệu được tạo tự động là một sai lầm .. mỗi lần. –

Trả lời

19

Tôi gặp phải lỗi này khi làm việc với Mô hình dữ liệu thực thể thay vì LINQ to SQL. Tôi đã tạo mô hình từ một cơ sở dữ liệu SQL Server hiện có. Vấn đề là do chọn Lớp Ngữ cảnh Dữ liệu sai trong hộp thoại Thêm Bộ điều khiển. Giá trị đó cần phải là lớp cấp cao nhất, trong trường hợp của tôi là giá trị có "Entitites" như một phần của tên. Tôi hi vọng cái này giúp được.

Add new Controller to MVC project From Entity Models

+1

Tôi biết điều này là một vài năm sau đó, nhưng câu trả lời này không giúp tôi, cảm ơn bạn Ken. – Rod

0

Tôi không chắc chắn nếu điều này là chính xác những gì bạn đang tìm kiếm .. nhưng tôi nhận thấy cùng một lỗi bản thân mình .. Google đã không giúp đỡ nhiều và tôi vết thương lên đốm vấn đề bản thân mình.

Giải pháp:

Nếu bạn đang tạo một mô hình có chứa một EF (Entity Framework) lớp mà kéo dài đến lớp khác .. chắc chắn rằng bạn đang mở rộng xây dựng mà đến lớp EF dự định và không phải là mẫu Loại tệp không chủ định ..

Tôi xin lỗi vì lời giải thích kém nhưng tôi mới làm điều này .. Hãy cho tôi biết nếu điều này có ích.

Kính trọng

+1

Cảm ơn thông tin. Tôi đang sử dụng LINQ to SQL thay cho EF. Cho đến nay tôi đã tìm ra rằng tôi có thể thêm một khung nhìn mạnh mẽ bằng cách nhấp chuột phải vào tên hàm và chọn thêm khung nhìn, vì vậy cách giải quyết của tôi là thêm bộ điều khiển w/o giàn giáo và sau đó thêm khung nhìn đã nhập vào mô hình LINQ. – fhilton

12

thoại này là khó hiểu lúc đầu khi sử dụng cơ sở dữ liệu tùy chọn Entity Framework đầu tiên.

Nếu bạn đang sử dụng DB trước thì cả menu thả xuống "lớp mô hình" và menu thả xuống "lớp ngữ cảnh dữ liệu" sẽ xuất hiện để có cùng tên lớp.

Nếu bạn là ví dụ, cố gắng tạo một bộ điều khiển được liên kết với kiểu "Người dùng" cho phép nói rằng bạn sẽ thấy "Người dùng" cả trong danh sách thả xuống mô hình cũng như trong phần "Ngữ cảnh dữ liệu" hộp thoại.

Trong phần "mô hình lớp" của hộp thoại bạn muốn chọn mô hình của mình (Người dùng trong ví dụ của chúng tôi tại đây).

Trong phần "Lớp ngữ cảnh dữ liệu" của hộp thoại bạn không muốn chọn "Người dùng". Thay vào đó bạn muốn chọn lớp có trong tệp EDMX của bạn kế thừa từ ObjectContext. Sẽ có một lớp như thế này trong danh sách thả xuống nếu bạn đang sử dụng DB đầu tiên. Bạn sẽ thấy lớp này trong danh sách và tôi không biết tại sao các lớp khác lại nằm trong danh sách. Tôi nghĩ rằng đó có thể là một lỗi giao diện người dùng nhỏ từ Microsoft.

Nếu bạn không biết lớp này là gì, chỉ cần truy cập mô hình EDMX của bạn và nhấp vào tệp designer.cs được liên kết với nó. Ở đầu mã này, bạn sẽ thấy lớp kế thừa từ ObjectContext. Đây là lớp bạn muốn chọn.

3

Tôi nhận được thông báo lỗi này khi tôi đã trộn lẫn "lớp mô hình" và "lớp ngữ cảnh dữ liệu".

0

tôi sửa lỗi vấn đề này trong WinDbg và Nó gây ra bởi sự Microsoft.VisualStudio.Web.Mvc.Scaffolding.BuiltIn.EntityFrameworkServices phương pháp sau đây:

 
internal static bool IsValidContextType(Type contextType) 
{ 
    return (typeof(ObjectContext).IsAssignableFrom(contextType) || ((contextType.BaseType != null) && contextType.BaseType.FullName.Equals("System.Data.Entity.DbContext", StringComparison.OrdinalIgnoreCase))); 
} 

Phương pháp này được trả về false vì nó đang được truyền Type sai. Tôi không chắc chắn nơi họ đến từ, nhưng có nhiều DLL được tải bên trong VS có chứa các triển khai của kiểu ngữ cảnh, nhưng chỉ một trong số chúng được bắt nguồn từ DbContext - tất cả những cái khác có nguồn gốc từ System.Object. các assembly này không có trong thư mục '% localappdata% \ assembly' của tôi, do đó chúng được tạo tự động bởi một số công cụ và được nạp vào VS.

Lỗi được gây ra bởi thực tế là Microsoft.VisualStudio.Web.Mvc.Util.TypeHelper.GetType chỉ bộ lọc theo Type.FullName. để tìm đúng Loại, nó cũng cần thiết để lọc theo IsValidContextType().

Ok, điều gì đó thực sự kỳ lạ đang diễn ra. Tôi có 2 lớp học một phần cho lớp dẫn xuất DbContext của tôi (phần lớn nó được tạo tự động bởi một kịch bản .tt và một số được tạo thủ công). khi tôi cố gắng thêm một bộ điều khiển, VS thêm các thuộc tính mới vào lớp một phần của tôi, sau đó nó xây dựng một phần của lớp một phần (chỉ phần hướng dẫn sử dụng, và nó không sử dụng lớp cơ sở). sau đó nó tải rằng DLL mà nó được xây dựng từ một nửa lớp mô hình vào bộ nhớ, sau đó nó không kiểm tra lớp cơ sở ở trên.

lạ.

dòng dưới cùng: thử xóa một phần các lớp trong ngữ cảnh mô hình của bạn, nếu bạn có.

+0

Điều này cũng có nghĩa là bạn không thể có nhiều cấp độ kế thừa của DBContext. Nó bắt được tôi. Nếu tôi lấy trực tiếp từ DbContext, nó hoạt động tốt. –

0

Tôi gặp vấn đề tương tự với EF. Tôi đang sử dụng VS 2012 Lý do cho trường hợp của tôi là .. quá trình tạo tự động này (Giàn giáo) dường như không nhận ra khái niệm từng phần.

Tôi đã sử dụng phương thức tiếp cận đầu tiên của mô hình và tôi đã sử dụng thừa kế với các thực thể. Ex: thực thể “B” và “C” được thừa hưởng từ “A”

Vì vậy, trong lớp mô hình tạo của tôi “DataModelContainer” được thừa hưởng từ “DbContext”, Không có định nghĩa cho “DbSet” và “DbSet ” ví dụ: hai dòng sau đây là không có

public DbSet<B> B { get; set; } 
public DbSet<C> C { get; set; } 

tạo‘DataModelContainer’lớp tôi một lớp học phần, vì vậy tôi đã hoàn thành phần khác, sử dụng các khái niệm về partial class. Và đây sẽ là một vấn đề cho Giàn giáo.

Cách giải quyết của tôi là, chỉ cần xóa lớp học mà tôi đã thêm theo cách thủ công. Và thêm các định nghĩa cho "DbSet" và "DbSet" vào lớp được tạo tự động. Vấn đề với giải pháp này là, tôi phải lặp lại điều tương tự khi tôi tạo lại các lớp mô hình.