Tại sao tôi gặp lỗi này: Không có ánh xạ nào được chỉ định cho EntitySet / AssociationSet - Entity1 sau đây?


96

Tôi đang sử dụng Entity Framework 4 với cách tiếp cận Model First.

Tôi bắt đầu dự án, thiết kế các thực thể và tạo cơ sở dữ liệu. Mọi thứ hoạt động tốt.

Sau đó, tôi cần quay lại và thêm một thực thể khác vào mô hình của mình. Tuy nhiên, khi tôi kéo một thực thể vào EDMX, tôi gặp lỗi này:

nhập mô tả hình ảnh ở đây

Ổn thỏa! Tôi chỉ cần ánh xạ Entity1 vào một bảng .. Nhưng này! Tôi đang sử dụng cách tiếp cận Model First, tôi hy vọng nó sẽ tạo bảng cho tôi khi tôi tạo DDL.

Làm cách nào để khắc phục lỗi này?


1
Vì vậy, có thể tạo tập lệnh cơ sở dữ liệu từ mô hình của bạn?
Ladislav Mrnka

Câu trả lời:


147

Điều này là do cách thức hoạt động của EF4 với kiểu đầu tiên.

Khi bạn lần đầu tiên tạo mô hình đầu tiên, nó ở trạng thái SSDL không tồn tại. Bạn có thể kéo các thực thể, liên kết chúng, v.v., nhưng nếu bạn nhìn vào SSDL trên tệp EDMX, bạn sẽ thấy rằng không có thực thể nào có bảng lưu trữ được liên kết trong SSDL.

Điều đó thay đổi khi bạn nhấp vào Generate Database From Modelmục menu ngữ cảnh. Phần khó hiểu là hành động này không chỉ đơn giản tạo ra một tập lệnh DDL. Trên thực tế, nó thay đổi tệp EDMX để bao gồm thông tin SSDL. Từ thời điểm này, tệp EDMX sẽ đi vào trạng thái mà mọi thực thể trong trình thiết kế / CSDL phải ánh xạ tới một thực thể trong SSDL. Nếu một trong những không ánh xạ, nó sẽ gây ra lỗi thời gian biên dịch:

Không có ánh xạ nào được chỉ định cho EntitySet / AssociationSet sau - (EntityName)

Một thực tế thú vị khác là nó không phải là loại lỗi sẽ ngăn cản quá trình biên dịch. Thực sự nó sẽ tạo ra thư viện lớp đầu ra. Nó không phải là một cảnh báo hay gì đó?

Để ngăn lỗi này, Tất cả những gì bạn phải làm sau khi chèn một thực thể mới là Generate Database From Modellặp lại. Điều đó sẽ cập nhật SSDL và sửa các ánh xạ.

BIÊN TẬP

Nếu bạn không sử dụng model-first và bạn "cập nhật từ cơ sở dữ liệu", bạn cũng sẽ gặp lỗi này trong trường hợp bạn đã xóa một bảng trong DB Server. Điều này là do Khung thực thể sẽ không tự động xóa thực thể cho bạn. Xóa đối tượng theo cách thủ công và lỗi sẽ biến mất.


1
Tôi gặp vấn đề tương tự sau khi cập nhật mô hình của mình chống lại các thay đổi bd (điều đó không tốt, vì cách tiếp cận của tôi không phải là mô hình đầu tiên).
balanza

5
@balanza, khi bạn không sử dụng model-first và bạn cập nhật mô hình của mình dựa trên cơ sở dữ liệu, bạn sẽ gặp lỗi này khi xóa bảng trong máy chủ vì trình thiết kế EF sẽ KHÔNG tự động xóa thực thể. Khi bạn tự xóa các loại thực thể, các lỗi sẽ biến mất
André Pena

Tôi đã thay đổi của tôi trực tiếp trong tệp xml của mô hình dữ liệu thực thể. Tôi có rất nhiều bảng và chức năng và có nguy cơ xảy ra một số không khớp vì vậy tôi đã thực hiện theo cách thủ công.
Bat_Programmer

Điều này là SIÊU hữu ích. Ngoài ra, nếu bạn đang sử dụng kiểu đầu tiên và "cập nhật từ cơ sở dữ liệu" và nhận các bảng mới, bạn cũng sẽ gặp lỗi. Nhưng chạy Tạo cơ sở dữ liệu từ Mô hình (không cần thực thi tập lệnh đã tạo - nó sẽ giết dữ liệu của bạn!) Sẽ khắc phục sự cố ánh xạ trong mã của bạn và bạn sẽ không gặp vấn đề gì khi sử dụng nó về sau.
Brian Warshaw

1
Bạn sẽ xử lý việc cập nhật lược đồ cho cơ sở dữ liệu SQL Server CE đã được triển khai như thế nào? Có thể di chuyển này cho một câu hỏi riêng biệt, nếu đó là thủ tục hoàn toàn không liên quan
FYK

35

Tôi nhận thấy mình đang gặp phải lỗi tương tự vì tôi đã quên tạo ràng buộc tham chiếu sau khi tạo liên kết giữa hai thực thể.


13
FYI: Kiểm tra các thuộc tính của liên kết và "Ràng buộc tham chiếu" ở phía dưới sẽ trống. Bấm vào dấu chấm lửng và tạo một ràng buộc.
Patrice Calvé

Điều này đã giúp tôi. Tôi phải tạo mối quan hệ 1 .. * từ thực thể gốc đến thực thể điều hướng của mình.
duyn9uyen 22/06/16

21

Lỗi 3027: Không có ánh xạ nào được chỉ định cho EntitySet / AssociationSet sau đây ... "- Entity Framework đau đầu

Nếu bạn đang phát triển mô hình với Entities Framework thì đôi khi bạn có thể gặp phải lỗi khó chịu này:

Lỗi 3027: Không có ánh xạ nào được chỉ định cho EntitySet / AssociationSet sau [Tên thực thể hoặc tên liên kết]

Điều này có thể không có ý nghĩa gì khi mọi thứ đều ổn trên EDM, nhưng đó là vì lỗi này không liên quan gì đến EDM thông thường. Những gì nó nên nói là "tái tạo các tệp cơ sở dữ liệu của bạn".

Bạn thấy đấy, Các thực thể kiểm tra SSDL và MSL trong quá trình xây dựng, vì vậy nếu bạn vừa thay đổi EDM của mình nhưng không sử dụng Tạo mô hình cơ sở dữ liệu ... thì nó phàn nàn rằng có thứ bị thiếu trong các tập lệnh sql của bạn.

vì vậy, trong ngắn hạn, giải pháp là: "Đừng quên Tạo Mô hình Cơ sở dữ liệu mỗi lần sau khi bạn cập nhật EDM của mình nếu bạn đang thực hiện phát triển mô hình đầu tiên. Tôi hy vọng vấn đề của bạn đã được giải quyết".


Điều này làm việc cho lỗi này cùng làm Tạo cơ sở dữ liệu mẫu đã giúp xóa các ngoại lệ
kolexinfos

7

Trong trường hợp của tôi, một nhà phát triển khác đã xóa một số bảng khỏi cơ sở dữ liệu cơ bản. Khi tôi nhận ra điều này và xóa các bảng này khỏi thực thể, vấn đề đã được giải quyết. Không rõ ràng như nó âm thanh.


6

Tôi đã gặp phải lỗi tương tự, nhưng tôi không sử dụng kiểu đầu tiên. Hóa ra bằng cách nào đó tệp EDMX của tôi chứa tham chiếu đến một bảng mặc dù nó không hiển thị trong trình thiết kế. Thật thú vị, khi tôi thực hiện tìm kiếm văn bản cho tên bảng trong Visual Studio (2013), bảng không được tìm thấy.

Để giải quyết vấn đề, tôi đã sử dụng trình chỉnh sửa bên ngoài (Notepad ++) để tìm tham chiếu đến bảng vi phạm trong tệp EDMX và sau đó (cẩn thận) xóa tất cả các tham chiếu đến bảng. Tôi rất tiếc phải nói rằng tôi không biết làm thế nào mà tệp EDMX lại ở trạng thái này ngay từ đầu.


5

Tôi đã thay đổi bảng và nó tạo một thực thể khác có số 1 ở cuối (chẳng hạn như MyEntity1và a MyEntity) như được xác nhận bởi trình duyệt mô hình edmx. Một cái gì đó về hai thực thể cùng nhau làm nhầm lẫn quá trình xử lý.

Xóa bảng và thêm lại nó đã sửa nó.


Lưu ý rằng nếu TFS được nối, thì hãy thực hiện kiểm tra edmx sau khi xóa. Sau đó và chỉ sau đó lấy bản mới nhất và thêm lại nó trong một quy trình hai bước xác định. Nếu không, TFS sẽ nhầm lẫn với việc xóa và thêm lại (các) thực thể được đặt tên giống nhau, điều này dường như gây ra sự cố.


Tôi đã gặp vấn đề tương tự sau khi thay đổi bảng. Tôi đã tìm thấy các thực thể giống nhau với số 1 và 2 (MyEntity1, MyEntity2) ở một số nơi trong mô hình. Tôi đã xem xét mọi nhánh (Sơ đồ, Loại thực thể, v.v.) và loại bỏ mọi trường hợp của MyEntity và MyEntity [n]. Để có biện pháp tốt, tôi đã thực hiện "Giải pháp sạch" và sau đó cập nhật từ cơ sở dữ liệu để chỉ thêm lại MyEntity.
MsTapp

4

Một cách nhanh hơn cho tôi là xóa các bảng và thêm lại chúng. Nó đã tự động ánh xạ chúng. :)


2

Đối với những người đang sử dụng Database Firstphương pháp tiếp cận, tất cả những gì bạn phải làm sau khi chèn một thực thể mới là Generate Database From Modelnhấp lại chuột phải vào .edmxtệp của bạn và chọnGenerate Database From Model...


0

Gặp lỗi này khi tôi đã xóa một bảng khỏi cơ sở dữ liệu. Giải quyết vấn đề bằng cách nhấp chuột phải vào biểu đồ EDMX, đi tới Thuộc tính, chọn bảng từ danh sách trong cửa sổ Thuộc tính và xóa nó (sử dụng phím xóa) khỏi sơ đồ.


0
  1. Đi tới Giải pháp Explorer, nhấp vào nút Tìm kiếm
  2. Bỏ chọn cả hai Search within file contentSearch External Files
  3. Nhập tên thực thể mà ánh xạ của bạn không nhận dạng được.
  4. Xóa tất cả các tệp LIÊN QUAN ĐẾN vấn đề. Chúng có thể sẽ được đặt tên theo cùng một thực thể bị mất tích. KHÔNG xóa bất kỳ tệp nào có tên Lớp ngữ cảnh của bạn trên tệp, đặc biệt nếu phần mở rộng của chúng là .cs hoặc .tt. Trong tệp .cs Ngữ cảnh .
  5. xóa tất cả các dòng mã tham chiếu đến thực thể bị thiếu. Chúng sẽ trông như thế này:

    public virtual DbSet< Entity1> Entity1 { get; set; }

Lỗi này thường xảy ra với các bảng bị xóa khỏi cơ sở dữ liệu.

Khi một người bỏ một bảng trong cơ sở dữ liệu, hoặc một người chỉ thay đổi web.config.connectionStringscơ sở dữ liệu EF Ánh xạ, để trỏ đến một bảng mới và không phải bảng được sử dụng để tạo ánh xạ ban đầu là vấn đề.

Đó là db mới này, các thực thể có lỗi 3027 không xuất hiện.


0

Tôi đã gặp lỗi khi cố tạo kết quả tùy chỉnh cho một thủ tục được lưu trữ và cho rằng nó phải là một thực thể.

Giải pháp là tôi vừa tạo một kiểu phức tạp trong trình duyệt Mô hình và gán kết quả đó cho "Nhập hàm chỉnh sửa".

Tôi sẽ thêm nó ở đây vì có vẻ như câu hỏi này là nơi google đưa bạn đến khi bạn gặp lỗi này.


0

Tôi đã đặt mọi thứ một cách chính xác (cardinalities và thuộc tính phụ thuộc) nhưng không thể tìm ra lý do tại sao tôi tiếp tục nhận được lỗi. Cuối cùng phát hiện ra rằng, EF đã tự tạo một cột trong bảng phụ thuộc (table_tablecolumn) và nó không có bất kỳ mối quan hệ nào với bảng, vì vậy không có ánh xạ nào được chỉ định. Tôi đã phải xóa cột trong tệp EDMX và xây dựng lại giải pháp đã khắc phục sự cố. Tôi đang sử dụng cách tiếp cận DB.


0

Cập nhật Mô hình từ Cơ sở dữ liệu không hoạt động với tôi.

Tôi đã phải xóa thực thể bị xung đột, sau đó thực hiện Mô hình Cập nhật từ Cơ sở dữ liệu, cuối cùng là xây dựng lại giải pháp. Sau đó, mọi thứ hoạt động tốt.


0

Chia sẻ điều này cho những người khác. Trong trường hợp của tôi, chúng tôi đang làm việc trên một giải pháp MVC được chia sẻ và sử dụng một mô-đun chung cho các bảng mà chúng tôi sử dụng cho danh sách thả xuống. Tôi đã gặp lỗi khi cập nhật mô hình Thực thể bằng cách thêm bảng mới. Hóa ra là khi tôi cập nhật EDMX, nó có thể đã cập nhật quyền truy cập của tôi trên cơ sở dữ liệu, dẫn đến việc tôi không có quyền truy cập vào bảng nhất định đó no mapping specified.

Chỉ cần thêm lại và cấp quyền truy cập cho người dùng của tôi đã giải quyết được vấn đề.


0

Tôi nghĩ rằng tôi có được điều này do không xóa rõ ràng một số bảng khỏi edmx trước khi đổi tên và thêm lại chúng. Thay vào đó, tôi chỉ đổi tên các bảng và sau đó thực hiện Cập nhật Mô hình từ Cơ sở dữ liệu, nghĩ rằng nó sẽ thấy chúng biến mất và xóa chúng khỏi mô hình. Sau đó, tôi đã thực hiện một Mô hình Cập nhật khác từ Cơ sở dữ liệu và thêm các bảng được đổi tên.

Trang web đang hoạt động với các bảng mới, nhưng tôi đã gặp lỗi. Cuối cùng, tôi nhận thấy các bảng ban đầu vẫn còn trong mô hình. Tôi đã xóa chúng khỏi mô hình (nhấp vào chúng trong màn hình edmx, phím xóa), và sau đó lỗi đã biến mất.

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.