2014-11-29 23 views
5

Đây là mã của tôi mặc dù tôi đã tinh chỉnh thuộc tính khóa nhưng vẫn có sự cố.Loại thực thể không có khóa được xác định EF6

public class Contacts 
{ 
    [Key] 
    public int ContactId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 
} 

Các lỗi tôi nhận được là:

Entity Type 'Liên hệ' không có khóa xác định. Xác định khóa cho loại thực thể này.
Entity loại: EntitySet 'Liên hệ' được dựa trên loại 'Liên hệ' mà không có chìa khóa định nghĩa

+1

Thật sao? Bạn đã xây dựng lại sau khi thiết lập thuộc tính 'Key' chưa? Bên cạnh đó, tôi muốn gọi lớp 'Liên hệ', bởi vì nó đại diện cho 1 số liên lạc, không phải là một tập hợp các số liên lạc. –

+0

có @Gert tôi đã xây dựng lại nó, nhưng vấn đề như trong đặt tên quy ước của lớp và ID. Thanks anyway :) – Affuu

+2

Vâng, tốt cho bạn, nhưng nó không có ý nghĩa. Thuộc tính khóa phải đủ ở đây. Tôi nghĩ cái gì đó khác đang diễn ra. –

Trả lời

7

Nếu bạn đang sử dụng EF Mã đầu tiên (không quy định trong câu hỏi của bạn), bạn sẽ cần phải thay đổi thuộc tính ContactId tên để ContactsId để phù hợp với quy ước của ClassName + Id để xác định khóa cho Danh bạ loại đối tượng của bạn.

Xem các Công ước MSDN Mã đầu tiên: http://msdn.microsoft.com/en-us/data/jj679962.aspx

+1

Khi có thuộc tính 'Key', các quy ước không làm bất cứ điều gì. –

+0

Hey nó đã làm việc :) cảm ơn bạn :) @jhischier – Affuu

+0

cũng làm việc cho tôi. không thể tìm ra cái này – steveareeno

0

Tôi biết rằng điều này đã được trả lời trong một thời trang, nhưng tôi muốn gửi một cách tiếp cận khác nhau đối với những người gặp phải này.

Lỗi này xảy ra đối với tôi ngay cả khi có [Khóa] được xác định phía trên thuộc tính mà tôi muốn chỉ định làm Khóa chính. Lỗi, xảy ra trong lệnh Update-Database, là do việc đặt tên của tôi về việc di chuyển (thông qua Add-Migration) giống như thực thể mà tôi muốn được thêm vào. Điều này là do lệnh Add-Migration đã tạo một lớp từng phần khớp với tên thực thể.

Ví dụ:

public class Contacts 
{ 
    [Key] 
    public int ContactId { get; set; } 
    public string Name { get; set; } 
} 

Không hoạt động khi tôi thực hiện:

Add-Migration Contacts 
Update-Database 

vì chữ ký lớp di dân trông giống như dưới đây, và cơ thể chứa không có tài sản với [Key] thuộc tính

public sealed partial class Contacts 

Để giải quyết vấn đề này, tôi đã xóa di chuyển và sửa đổi tên giống hệt lệnh Thêm di chuyển:

Add-Migration ContactsTable 
Update-Database 
Các vấn đề liên quan