为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
吃鸡游戏 2019-10-17 14:47:23
我正在进入实体框架,但是不确定是否缺少代码优先方法的关键点。我正在使用基于https://genericunitofworkandrepositories.codeplex.com/中的代码的通用存储库模式,并创建了我的实体。但是,当我尝试访问或修改实体时,会遇到以下问题:System.InvalidOperationException:实体类型Estate不属于当前上下文模型。当我尝试从存储库访问它时会发生这种情况:public virtual void Insert(TEntity entity){    ((IObjectState)entity).ObjectState = ObjectState.Added;    _dbSet.Attach(entity); // <-- The error occurs here    _context.SyncObjectState(entity);}可以很好地创建数据库(./SQLEXPRESS),但是在启动时不创建实体(表)。我想知道是否需要显式设置实体的映射?EF自己不能做到这一点吗?我的实体是:public class Estate : EntityBase{    public int EstateId { get; set; }    public string Name { get; set; }} 我的情况是这样的:public partial class DimensionWebDbContext : DbContextBase // DbContextBase inherits DbContext{    public DimensionWebDbContext() :        base("DimensionWebContext")    {        Database.SetInitializer<DimensionWebDbContext>(new CreateDatabaseIfNotExists<DimensionWebDbContext>());        Configuration.ProxyCreationEnabled = false;    }    public new IDbSet<T> Set<T>() where T : class    {        return base.Set<T>();    }}是否有任何特定原因导致此错误发生?我尝试了启用迁移并启用自动迁移而没有任何帮助。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

将其放在您的自定义DbContext类中:


protected override void OnModelCreating(DbModelBuilder modelBuilder)

{

    modelBuilder.Entity<Estate>().ToTable("Estate");

}

如果您的表不是在启动时创建的,这就是原因。您需要在OnModelCreating方法重写中告诉DbContext有关它们的信息。


您可以在此处进行自定义每个实体的映射,也可以将它们分成单独的EntityTypeConfiguration<T>类。


查看完整回答
反对 回复 2019-10-17
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您可以尝试从模型中删除表格,然后再次添加。您可以通过从解决方案资源管理器中打开.edmx文件来直观地执行此操作。


脚步:


从解决方案资源管理器中双击.edmx文件

右键单击要删除的表头,然后选择“从模型删除”

现在再次右键单击工作区,然后选择“从数据库更新模型。”

从表列表中再次添加表

清理并构建解决方案


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 1480 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信