首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体类型<type>不是当前上下文的模型的一部分

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

Stack Overflow用户
提问于 2013-12-20 02:21:03
回答 22查看 258.6K关注 0票数 164

我正在进入实体框架,但我不确定我是否错过了代码优先方法中的一个关键点。

我使用了一个基于https://genericunitofworkandrepositories.codeplex.com/代码的通用存储库模式,并创建了我的实体。

但是,当我尝试访问或修改实体时,我遇到了以下问题:

System.InvalidOperationException:实体类型System.InvalidOperationException不是当前上下文的模型的一部分。

当我试图从我的存储库访问它时,就会发生这种情况:

代码语言:javascript
复制
public virtual void Insert(TEntity entity)
{
    ((IObjectState)entity).ObjectState = ObjectState.Added;
    _dbSet.Attach(entity); // <-- The error occurs here
    _context.SyncObjectState(entity);
}

数据库(./SQLEXPRESS)创建得很好,但实体(表)不是在启动时创建的。

我想知道我是否需要显式设置实体的映射?EF自己不能做到这一点吗?

我的实体是:

代码语言:javascript
复制
public class Estate : EntityBase
{
    public int EstateId { get; set; }
    public string Name { get; set; }
} 

我的上下文是这样的:

代码语言:javascript
复制
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>();
    }

}

出现这个错误有什么特别的原因吗?我也尝试过在没有任何帮助的情况下启用迁移和自动迁移。

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2013-12-20 02:41:19

将以下代码放入您的自定义DbContext类中:

代码语言:javascript
复制
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Estate>().ToTable("Estate");
}

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

您可以在这里进行自定义的每实体映射,也可以将它们分离到单独的EntityTypeConfiguration<T>类中。

票数 150
EN

Stack Overflow用户

发布于 2014-06-12 14:51:23

显然,这个错误是非常普遍的,它可能有许多原因。在我的例子中,是这样的:.edmx生成的连接字符串(在Web.config中)无效。在几乎尝试了一天之后,我将连接字符串从EF字符串更改为ADO.NET字符串。这解决了我的问题。

例如,EF字符串如下所示:

代码语言:javascript
复制
<connectionStrings> 
  <add name="BlogContext"  
    connectionString="metadata=res://*/BloggingModel.csdl| 
                               res://*/BloggingModel.ssdl| 
                               res://*/BloggingModel.msl; 
                               provider=System.Data.SqlClient 
                               provider connection string= 
                               &quot;data source=(localdb)\v11.0; 
                               initial catalog=Blogging;
                               integrated security=True; 
                               multipleactiveresultsets=True;&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings>

ADO.NET字符串如下所示:

代码语言:javascript
复制
<connectionStrings>
  <add name="BlogContext"  
        providerName="System.Data.SqlClient"  
        connectionString="Server=.\SQLEXPRESS;Database=Blogging;
        Integrated Security=True;"/> 
</connectionStrings>

来源:http://msdn.microsoft.com/nl-nl/data/jj556606.aspx

票数 78
EN

Stack Overflow用户

发布于 2016-11-03 03:19:51

对我来说,问题是我没有在实体框架的上下文中将实体类包含在我的数据库集中。

代码语言:javascript
复制
public DbSet<ModelName> ModelName { get; set; }
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20688922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档