Тип объекта <classname> не является частью модели для текущего контекста
DB имеет таблицу 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.
Update
Я редактировал этот вопрос и запрашивал его повторное открытие, потому что ситуация также возникает в первом подходе модели, где отображение таблицы выполняется в файле EDMX вместо отмеченной здесь примечания:
В окне "Модель браузера" отображается Package
в боте типы объектов "Модель" и "Сохранить", а сопоставление таблиц объектов отображает каждое свойство, правильно отображаемое в столбец таблицы. Это то же самое отображение, выполненное в стиле кода с аннотацией.
Ответы
Ответ 1
Явно добавить атрибут "DatabaseGenerated"
для установки значения "identity"
столбца в базе данных
[DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]
Укажите точность для десятичного типа данных. Это связано с тем, что по умолчанию предполагается, что после десятичного числа для десятичного типа данных существует два числа. Нам нужно установить его 0.
modelBuilder.Entity<User>().Property(x => x.ID).HasPrecision(16, 0);