Тип сущности <classname>не является частью модели для текущего контекста - PullRequest
28 голосов
/ 13 февраля 2011

БД имеет таблицу 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.

Обновление

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

В окне «Обозреватель моделей» отображается Package в боте типов сущностей Модель и Магазин, а в Таблице сопоставления сущности показано каждое свойство, правильно сопоставленное со столбцом таблицы.Это то же самое отображение, выполненное в стиле кода аннотации.

1 Ответ

1 голос
/ 31 января 2013

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

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

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

modelBuilder.Entity<User>().Property(x => x.ID).HasPrecision(16, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...