Тип объекта ‹classname› не является частью модели для текущего контекста.

В БД есть таблица PackagingInfo. У меня есть класс Package и класс ShopEntities : DbContext.

// Entity (ex. Package.cs)
[Table("PackagingInfo")]
public class Package
{
    public decimal PackageID { get; set; }
    public decimal Title { get; set; }
    public decimal Cost { get; set; }
    public bool isFree { get; set; }

}

// Entity Context (ex. ShopEntities.cs)
public class ShopEntities : DbContext
{               
    public DbSet<Package> Packages { get; set; }
}


// Controller Action (ex. HomeController.cs)
public ActionResult Index()
{
    ShopEntities _db = new ShopEntities();
    var q = _db.Packages.ToList();
    return View(q);
}

После создания экземпляра контекста _db и проверки его свойства Packages замечено исключение:

The entity type Package is not part of the model for the current context.

Обновлять

Я отредактировал этот вопрос и запросил его повторное открытие, потому что ситуация также возникает при первом подходе модели, когда сопоставление таблиц выполняется в файле EDMX вместо отмеченной здесь аннотации:

Окно Model Browser показывает Package в типах сущностей Model и Store, а сопоставление таблицы сущности показывает каждое свойство, правильно сопоставленное со столбцом таблицы. Это то же самое сопоставление, которое достигается с помощью стиля аннотаций с первым кодом.


person maryam    schedule 13.02.2011    source источник
comment
Связанный вопрос: stackoverflow.com/questions/13634819/   -  person one.beat.consumer    schedule 30.11.2012
comment
Я не могу воспроизвести вашу ошибку. Я попробовал ваш код с подходом Code First, и все работает. Можете ли вы воспроизвести свою проблему в простом консольном приложении?   -  person Wouter de Kort♦    schedule 03.01.2013
comment
Можете ли вы показать схему базы данных для этой таблицы?   -  person Calvin Allen    schedule 20.01.2013
comment
Кроме того, покажите нам строку подключения в вашем файле web.config...   -  person Calvin Allen    schedule 20.01.2013


Ответы (1)


Явно добавьте атрибут “DatabaseGenerated”, чтобы установить значение “identity” столбца в базе данных.

[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]

Задайте точность для десятичного типа данных. Это связано с тем, что по умолчанию предполагается, что после десятичного числа для десятичного типа данных есть два числа. Нам нужно установить его 0.

modelBuilder.Entity<User>().Property(x => x.ID).HasPrecision(16, 0);
person Bhushan Firake    schedule 31.01.2013