实体类型<classname>不是当前上下文模型的一部分。

28

DB 有一个表叫 PackagingInfo。我有一个名为 Package 的类,以及继承自 DbContext 的 ShopEntities

// 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文件中完成的,而不是在这里注意到的注释中:

模型浏览器窗口显示Package在模型和存储实体类型中,并且实体的表映射显示每个属性正确地映射到表列。这与注释代码优先样式实现的相同映射。


相关问题:https://dev59.com/kmvXa4cB1Zd3GeqPJn1X - one.beat.consumer
2
我无法重现你的错误。我已经尝试了使用 Code First 方法的你的代码,一切都正常工作。你能否在一个简单的控制台应用程序中重现你的问题? - Wouter de Kort
你能展示一下这个表的数据库模式吗? - Calvin Allen
另外,请在您的web.config文件中显示连接字符串... - Calvin Allen
1个回答

1

在数据库中,明确添加"DatabaseGenerated"属性以设置列的"identity"值。

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

指定十进制数据类型的精度。因为默认情况下,它假设十进制数据类型有两个小数点后的数字。我们需要将其设置为0。

modelBuilder.Entity<User>().Property(x => x.ID).HasPrecision(16, 0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接