2012-02-18 20 views
5

Tôi muốn hiển thị thông tin khách hàng. Sau đó, tôi đã tạo một số lớp học; Khách hàng, Phân phối, Đơn đặt hàng, Đơn hàng, Sản phẩm và cho thuêDB. lớp cho thuêDBDB đặt 5 DbSet sản phẩm, khách hàng, đơn đặt hàng, đơn đặt hàng và giao hàng. Khi tôi làm UserController với xem danh sách, tôi không thể hiển thị thông tin khách hàng, và phải mất lỗi:Loại thực thể ASP.NET MVC 3 không có khóa được xác định

One or more validation errors were detected during model generation: 
System.Data.Edm.EdmEntityType: : EntityType 'OrderLine' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntityType: : EntityType 'Delivery' has no key defined. Define the key for this EntityType. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �OrderLine� is based on type �OrderLine� that has no keys defined. 
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �Delivery� is based on type �Delivery� that has no keys defined. 

Tôi không biết lý do tại sao những thực thể đòi hỏi quan trọng? Tôi không biết gì về lỗi này .. Bạn có thể giúp tôi không?

--UserController.cs--

namespace MvcApplication2.Controllers 
{ 
public class UserController : Controller 
    { 
    // 
    // GET: /User/ 
    rentalDB _db = new rentalDB(); 

    public ActionResult Index() 
    { 
     var model = _db.Customer; 
     return View(model); 
    } 
    } 
} 

--Delivery.cs trong Models folder--

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 

--OrderLine.cs trong Models folder--

namespace MvcApplication2.Models 
{ 
    public class OrderLine 
    { 
    public int basketId { get; set; } 
    public int productId { get; set; } 
    public int quantity { get; set; } 
    } 
} 

Trả lời

17

Để sử dụng khung thực thể, mọi thực thể đều cần một khóa. Đây là cách EF theo dõi các đối tượng trong bộ nhớ cache của nó, đăng tải các cập nhật về kho dữ liệu cơ bản và liên kết các đối tượng liên quan với nhau.

Yours đối tượng đã có chìa khóa, bạn chỉ cần nói với EF về họ:

namespace MvcApplication2.Models 
{ 
    public class Delivery 
    { 
    [Key] public int trackId { get; set; } 
    public String address { get; set; } 
    public String postCode { get; set; } 
    public decimal deliveryPrice { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime returnDate { get; set; } 
    } 
} 
+0

Điều này làm việc cho tôi trong trường hợp đặc biệt. Tôi đã thêm một bộ điều khiển sau khi viết mã cho mô hình và không nhận được lỗi. Tại thời điểm đó tôi nhận ra mô hình không phải là những gì tôi muốn có nghĩa là tất cả các quan điểm được tạo ra là rất sai vì vậy tôi đã xóa bộ điều khiển/khung nhìn. Sau đó, khi tôi sửa mô hình và thêm bộ điều khiển, lỗi xuất hiện. Sau khi rối tung khoảng một giờ, tôi đã thêm [Key] và nó đã hoạt động. Có lẽ visual studio Mvc weirdness hay cache, không biết ... – isitdanny

0

Khi bạn sử dụng một ORM (object-relational mapper) khuôn khổ như NHibernate hoặc Entity framework giúp bạn ánh xạ một quan hệ cơ sở dữ liệu cho một mô hình đối tượng bạn cần một cái gì đó sẽ cho phép bạn tạo ra một mối quan hệ có ý nghĩa giữa các đối tượng trong bộ nhớ và các hàng dữ liệu trong cơ sở dữ liệu của bạn và điều đó là khóa (id như NHibernate gọi nó) và thường là cách tự nhiên mà RDBMS theo dõi bản ghi bằng cách sử dụng khóa chính (thường bạn sử dụng khóa chính DB làm khóa của đối tượng) Khi bạn kiểm tra xem hai đối tượng có bằng nhau bằng toán tử == mà bạn đang kiểm tra hay không những đối tượng đó có cùng tham chiếu (hoặc địa chỉ trong bộ nhớ). Đây là loại bình đẳng không phải là rất hữu ích khi bạn đang sử dụng một ORM. Bạn có thể tải nhiều trường hợp của một bản ghi trong bộ nhớ với tham chiếu khác nhau để nó không thể kiểm tra sự bình đẳng của các đối tượng bằng cách tham khảo của họ. chơi và phím có vai trò chính trong vở kịch này.

Các vấn đề liên quan