ADO.NET Entity Framework: Update Wizard sẽ không thêm bảng


93

Tôi đã thêm Mô hình Dữ liệu Thực thể ADO.Net mới vào dự án của mình và sử dụng Trình hướng dẫn Cập nhật để thêm bảng vào mô hình. Năm trong số các bảng được chọn đã được thêm vào bề mặt thiết kế. Hai bảng khác sẽ không thêm. Tôi chọn chúng trong trình hướng dẫn và nhấp vào Hoàn tất, nhưng chúng không bao giờ hiển thị trên bề mặt thiết kế.

Đây có phải là một lỗi hay có một số tình huống không thể thêm bảng vào mô hình (theo thiết kế)?


CẬP NHẬT: XML (* .edmx) tiết lộ sự cố.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
Điều này sẽ có thêm WAY phiếu bầu. Tôi không biết Visual Studio không thể thêm bảng vì tệp .edmx là nơi duy nhất thực sự xảy ra lỗi. Hy vọng rằng họ sẽ có một hộp thoại trong v2!
John Bubriski

+1 - Trong trường hợp của tôi, không có thông báo lỗi.
teynon

Như bạn đã lưu ý, các bảng sẽ không nhập không có khóa chính. Thêm PK và bạn đã sẵn sàng.
Eric

Câu trả lời:


46

Bề mặt thiết kế khác với mô hình thực thể. Có thể có một bảng trong ánh xạ trong EDMX của bạn mà bảng này không xuất hiện trên bề mặt thiết kế. Xem tệp dưới dạng XML để xem có đúng như vậy không. Trong trường hợp này, Trình hướng dẫn Cập nhật sẽ không cho phép bạn thêm lại các bảng, vì chúng đã là một phần của mô hình thực thể. Vì vậy, nói chung, Trình hướng dẫn cập nhật biết nhiều hơn về mô hình thực thể của bạn hơn là về bề mặt thiết kế, theo .

Tôi không nghĩ đó chính xác là tình huống bạn đang gặp phải, nhưng nó sẽ cung cấp cho bạn ý tưởng chung cho giải pháp: đi vào XML và tìm kiếm các tham chiếu đến các bảng được đề cập.


4
Tôi vừa gặp vấn đề này, tôi đã xóa một bảng khỏi mô hình và khi tôi thêm lại nó, trình thiết kế trực quan đã không hiển thị nó như trong cơ sở dữ liệu. Để giải quyết vấn đề, tôi đã xóa văn bản khỏi tệp .edmx, nhưng đã cố gắng làm xáo trộn XML. Nếu bạn làm điều này, vui lòng sao lưu tệp trước, đề phòng. May mắn thay, tôi đã có thể tìm thấy thẻ bị lộn xộn với git diff.
GrandMasterFlush

41

Đặt Khóa chính cho tất cả các bảng hoặc chỉ một hộp kiểm bỏ chọn "Cho phép null" cho bất kỳ cột nào của mỗi bảng. Nó phù hợp với tôi :)


2
Tôi tin rằng đây là câu trả lời chính xác, ít nhất là nó dành cho tôi. Cảm ơn!
Eric

@Parvinder, tôi đã gặp khó khăn về vấn đề này trong hầu hết dự án của mình. Cuối cùng, câu trả lời của bạn đã làm rõ tất cả cho tôi. Trong trường hợp của tôi, trong bảng Tham gia, tôi đã không chỉ định trường Không khóa rỗng hoặc chỉ khóa chính. Sau khi sửa lỗi này, tôi đã yên tâm. Thanks a lot
PatsonLeaner

Điều tôi hiểu với cách giải quyết là chúng ta không thể thêm bảng vào Mô hình thực thể nếu tôi) bảng đó không có khóa chính hoặc (ii) Không có cột Allow Null trong bảng đó.
Murtuza Khan

10

1 Thay đổi cấu trúc Bảng và thêm một Cột chính. Cập nhật Model.

2. Sửa đổi tệp .EDMX trong Trình soạn thảo XML và thử thêm một Cột mới dưới thẻ cho bảng cụ thể này. (SẼ KHÔNG LÀM VIỆC)

3.Thay vì tạo một cột chính mới để thoát bảng, tôi sẽ tạo một khóa tổng hợp bằng cách liên quan đến tất cả các cột hiện có. (ĐÃ LÀM VIỆC)

Khung thực thể: Thêm DataTable không có khóa chính vào mô hình thực thể.


Tôi đã gặp phải vấn đề tương tự. Mô hình Thực thể đã thêm bảng, tuy nhiên, nó không hiển thị trong trình thiết kế. Tôi cũng không thể truy cập nó bằng mã. Tôi đã thêm một trường ID Key ... đã hoạt động!
Ravi Ram

6

Tôi cũng đã gặp vấn đề này, tất cả những điều trên đều không hiệu quả với tôi. Điều gì đã giúp tôi là những điều sau đây.

Khi bạn cố gắng kết nối với một cơ sở dữ liệu, cơ sở dữ liệu đó có thể có những người dùng khác nhau với các thông tin xác thực khác nhau, nó có thể chấp nhận. Giả sử người dùng A đến D.

Nếu bạn cố gắng kết nối với người dùng, hãy đảm bảo rằng người dùng đó đã bật thông tin đăng nhập phù hợp, trong trường hợp này, hãy bật tùy chọn đọc và ghi.

Để thực hiện việc này, hãy khởi động MS SQL Server Managment Studio, được kết nối với máy chủ SQL của bạn và chọn cơ sở dữ liệu mà bạn cố gắng tạo kết nối trong visual studio. Trong 'your_dbname' -> Bảo mật -> Người dùng, bạn tìm thấy danh sách người dùng. Nhấp chuột phải vào tên người dùng mà bạn cố gắng đăng nhập và chọn thuộc tính. Một cửa sổ mở ra. Chọn trang 'Chung' (được chọn theo mặc định) và trong tab 'Tư cách thành viên vai trò cơ sở dữ liệu' đảm bảo rằng 'db_datareader' và 'db_datawrite' được chọn.

Lưu ý: Khi bạn đăng nhập quá MS SQL Server Managment Studio, hãy đảm bảo rằng bạn đăng nhập bằng người dùng có thể bật / tắt các tùy chọn này ...


5

Kiểm tra 'Nulls' trong bảng cụ thể của bạn. Nếu tất cả các cột được đặt thành 'Allow Null' Entity Framework coi nó như một bảng 'Null'. Tôi gặp vấn đề tương tự và bỏ chọn 'Allow Null' và nó đã thêm bảng được yêu cầu.


1
Nó hoạt động, ngu ngốc không có lỗi cũng như cảnh báo xuất hiện trong nhật ký!
RolandoCC



1

Điều này đã được giải quyết trong phiên bản mới nhất (môi trường: VS 2012, .net framework 4.5). Đơn giản, mở tệp .edmx và thêm các bảng / thủ tục / chế độ xem được lưu trữ cần thiết. Bảng / chế độ xem không có khóa chính sẽ được tạo dưới dạng bảng / chế độ xem chỉ đọc.

Bảng / chế độ xem 'TABLE_NAME' không có khóa chính được xác định. Khóa đã được suy ra và định nghĩa được tạo dưới dạng bảng / chế độ xem chỉ đọc.


1
lỗi vẫn còn trong một số trường hợp, sự kiện trong EF 5.0
Greg Z.

0

Bạn không cần phải xóa toàn bộ mô hình (có thể là hàng trăm bảng!).

Wizard có thể xử lý việc "thêm mới" các mục, nhưng một số thay đổi như thay đổi khóa tổng hợp và đổi tên cột - nó không biết phải làm gì - vì vậy nó không thử - và mọi thứ không đồng bộ.

VẬY: XÓA các bảng được đề cập khỏi Mô hình (chế độ khái niệm) VÀ khỏi Model.Store, sau đó Cập nhật mô hình bằng Trình hướng dẫn và chỉ thêm lại các bảng được đề cập.


0

Chỉ đưa ra một số chi tiết hơn cho bất kỳ ai chưa từng phải làm việc này trước đây. Tôi đang sử dụng visual studio 2013 với bản cập nhật 4 được cài đặt. Tôi đã thêm một số trường vào bảng, xóa bảng khỏi mô hình của mình rồi cập nhật và nó sẽ không cho phép tôi kiểm tra bất kỳ bảng nào.

Tôi có một khóa chính.

Tôi đã tạo một bảng kiểm tra mới, bảng đó sẽ hiển thị và nó sẽ cho phép tôi kiểm tra nó nhưng không phải bảng gốc của tôi.

Tôi chưa bao giờ mở nó bằng XML trước đây và không biết làm thế nào để làm điều đó. Bạn nhấp chuột phải vào tệp .edmx và "mở bằng" - chọn trình chỉnh sửa xml.

bảng được đề cập ở đó ổn, nó thậm chí có các trường mới (lạ).

Tôi đã xóa tất cả các tham chiếu đến nó (mất một vài lần) - sau khi bạn xóa một tham chiếu và lưu, nếu bạn cố gắng mở nó và nó sẽ không hiển thị, hãy tiếp tục và chọn "xem XML" - hãy xem các lỗi và về cơ bản theo dõi quả bóng nảy cho đến khi bạn đã làm sạch nó.

hy vọng các chi tiết bổ sung sẽ giúp ai đó.

Joe


0

Một cách dễ dàng mà tôi đã tìm thấy là (trong SQL Server Management Studio) thêm một cột ID thuộc loại INT, bỏ chọn "Cho phép Null" và trong Thuộc tính cột (của ID) >> Đặc tả danh tính >> kiểm tra (Là danh tính) và thực hiện gia số chắc chắn được thiết lập.

Sau khi hoàn tất các bước trên, hãy quay lại cửa sổ .edmx của bạn, nhấp chuột phải và Cập nhật Mô hình từ Cơ sở dữ liệu.


0

Bạn có thể thêm bảng chéo cột Khóa chính. Sau đó, vấn đề đang được giải quyết


0

Một giải pháp khác là đảm bảo tài khoản bạn đang truy cập cơ sở dữ liệu thông qua có một số quyền đối với bảng, Chọn ít nhất. Bảng sẽ không được thêm nếu tài khoản không có quyền đối với nó.

Trong SSMS dưới Bảo mật, bấm chuột phải vào người dùng hoặc vai trò, sau đó bấm Thuộc tính. Sau đó nhấp vào Securables. Bảng trên cùng hiển thị các bảng hiện có thể truy cập được. Nếu các bảng bị thiếu không có ở đó, hãy nhấp vào tìm kiếm và tìm sau đó, đánh dấu chúng trong bảng trên cùng, sau đó chỉ định quyền trong bảng dưới

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.