ASP.NET MVC 3 EntityType не определен ключ - PullRequest
6 голосов
/ 18 февраля 2012

Я хочу отобразить информацию о клиенте. Затем я создал несколько классов; Клиент, Доставка, Заказ, Линия заказа, Продукт и арендаDB. Класс rentalDB устанавливает 5 DbSet для продукта, клиента, заказа, строки заказа и доставки. Когда я создаю UserController с представлением списка, я не могу отобразить информацию о клиенте, и это принимает ошибки:

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.

Я не знаю, почему этим сущностям требуется ключ? Я понятия не имею, для этой ошибки .. Не могли бы вы помочь мне?

- 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 в папке Models -

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 в папке Models -

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

Ответы [ 2 ]

18 голосов
/ 19 февраля 2012

Чтобы использовать структуру объекта, каждому объекту нужен ключ.Вот как EF отслеживает объекты в своем кэше, отправляет обновления обратно в основное хранилище данных и связывает связанные объекты вместе.

У ваших объектов уже есть ключи, вам просто нужно сообщить EF о них:

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 голосов
/ 19 февраля 2012

Когда вы используете каркас ORM (объектно-реляционный маппер), такой как NHibernate или Entity, который помогает вам сопоставить реляционную базу данных с объектной моделью, вам нужно что-то, что позволит вам установить значимые отношения между объектами в памяти и строкамиданные в вашей базе данных, и эта вещь является ключом (идентификатором, который называют NHibernate), и обычно это естественный способ отслеживания записей в СУБД с использованием первичного ключа (обычно вы используете первичный ключ БД в качестве ключа вашего объекта).если два объекта равны с помощью оператора ==, вы проверяете, что эти объекты имеют одинаковые ссылки (или адреса в памяти).Этот вид равенства не очень полезен, когда вы используете ORM. Вы можете загрузить несколько экземпляров записи в память с различными ссылками, так что невозможно проверить равенство объектов по их ссылкам. Это происходит при проверке равенства по значению.игра и клавиши играют главную роль в этой игре.

...