【问题标题】:The entity type <classname> is not part of the model for the current context实体类型 <classname> 不是当前上下文模型的一部分
【发布时间】:2011-06-26 08:50:59
【问题描述】:

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.

更新

我已经编辑了这个问题并请求重新打开它,因为这种情况也发生在模型优先方法中,其中表映射是在 EDMX 文件中完成的,而不是在此处注意到的注释:

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

【问题讨论】:

  • 我无法重现您的错误。我已经使用 Code First 方法尝试了您的代码,并且一切正常。你能在一个简单的控制台应用程序中重现你的问题吗?
  • 你能显示这个表的数据库架构吗?
  • 另外,请向我们展示您的 web.config 中的连接字符串...

标签: entity-framework ef-code-first


【解决方案1】:

显式添加“DatabaseGenerated”属性设置数据库中列的“identity”

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 2013-11-10
    • 2014-11-30
    • 2017-06-19
    • 2014-01-08
    • 2014-03-29
    • 2018-02-16
    相关资源
    最近更新 更多