2012-09-08 19 views
7

Trong Entity Framework 4.3.1 tôi đã có mô hình sau đây, và họ đã làm việc tốt:Entity Framework 4.3.1 -> 5.0 Ngoại lệ: "EntityType không có khóa được xác định. Xác định khóa cho EntityType này."

public class BaseUser 
{ 
    [Key] 
    [MaxLength(100)] 
    public string Username { get; set; } 
} 

[Table("AppUser")] // Ensures EF Code First uses Table-per-Type 
public class AppUser : BaseUser 
{ 
    [MaxLength(200)] 
    public string About { get; set; } 
} 

Sau khi nâng cấp lên EF 5.0, tôi nhận được ngoại lệ sau khi tôi cố gắng để chạy ứng dụng này và truy cập vào DbContext liên quan:

EntityType 'AppUser' has no key defined. Define the key for this EntityType. 

Làm cách nào để giải quyết vấn đề này? Điều này dường như là một hồi quy.

Trả lời

3

Ngoại lệ này là do trộn các phiên bản EF.

Người dùng cơ sở được định nghĩa trong một Dự án được chia sẻ sử dụng EF 4.3.1. Người dùng ứng dụng nằm trong Dự án sử dụng EF 5.0. Ngoại lệ khó hiểu này là kết quả của việc cố gắng kế thừa từ một mô hình trong một dự án chưa được nâng cấp lên EF 5.0. Việc chia dự án được chia sẻ và nâng cấp dự án được chia sẻ ở đây đã giải quyết được vấn đề.

Nếu những người khác chạy vào điều này, điều đáng nói là việc nâng cấp hơi khó xử. Vì NuGet dường như không nhận thấy sự cần thiết phải nâng cấp, nó cho phép bạn cài đặt EF 5.0 lên trên nó, liệt kê phiên bản mới là 4.4 sau khi cài đặt và yêu cầu bạn đưa cả hai câu lệnh sau vào các lớp Model của bạn một số chú thích dữ liệu EF đã được di chuyển (chuyển hướng) và một số chú thích không phải là:

using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema;