从EF 6.0 Beta升级到RC后的System.MissingMethodException

时间:2013-09-18 20:17:28

标签: c# entity-framework

这是什么意思?

  

System.MissingMethodException未被用户代码
处理   HResult = -2146233069消息=未找到方法:   “System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration   System.Data.Entity.ModelConfiguration.Configuration.StructuralTypeConfiguration 1.Property(System.Linq.Expressions.Expression 12<!0,!! 0 GT;&GT)”。   Source = Att.Uds.DataLayerMappings StackTrace:          at Att.Uds.DataLayerMappings.ItemTypeItemConfiguration..ctor()          在Att.Uds.DataLayerMappings.UdsContext.OnModelCreating(DbModelBuilder)   modelBuilder)   C:\ TFS \ ATS-MSDEV \ UDS \开发\代码\ Att.Uds.DataLayerMappings \ UdsContext.cs:线   163          在System.Data.Entity.DbContext.CallOnModelCreating(DbModelBuilder)   模型构建器)          在System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder()          在System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext)   internalContext)          在System.Data.Entity.Internal.RetryLazy2.GetValue(TInput输入)InnerException:

此课程出现错误:

namespace Contoso.Fabrikam.DataLayerMappings
{ 
  public abstract class NamedEntityConfiguration<TEntity> : EntityBaseConfiguration<TEntity> where TEntity : NamedEntity
  {
    public ConfigurationColumn NameColumn;
    protected new int LastOrdinalPosition
    {
      get
      {
        return (NameColumn.Ordinal);
      }
    }
    public NamedEntityConfiguration() <=== EXCEPTION HERE
    {
      NameColumn = new ConfigurationColumn() { Ordinal = base.LastOrdinalPosition+1, Name = "Name", IsRequired = true, Length = 128 };
      this.Property(t => t.Name)
        .HasColumnName(NameColumn.Name)
        .HasColumnOrder(NameColumn.Ordinal)
        .HasMaxLength(NameColumn.Length);
      if(NameColumn.IsRequired)
      {
        this.Property(t => t.Name).IsRequired();
      }
    }
  }
}

谢谢

3 个答案:

答案 0 :(得分:7)

@Saber他的答案之所以有效是因为当您将项目升级到更高的.NET版本时,项目文件不会自动升级。例如,如果从.NET 4.0升级到.NET 4.5并编辑项目文件,则可能会看到以下内容:

<Reference Include="EntityFramework">
      <HintPath>..\packages\EntityFramework.6.1.3\lib\net40\EntityFramework.dll</HintPath>
    </Reference>
    <Reference Include="EntityFramework.SqlServer">
      <HintPath>..\packages\EntityFramework.6.1.3\lib\net40\EntityFramework.SqlServer.dll</HintPath>
    </Reference>

您必须将引用更改为 net45 ,而不是 net40 。删除包时,这将产生相同的行为。

答案 1 :(得分:6)

我遇到了同样的错误。 它对我有用:

  1. 在软件包管理器控制台中卸载 - 包EntityFramework
  2. 从&#39; packages&#39;删除EntityFramework文件夹夹
  3. 在程序包管理器控制台中安装包实体框架

答案 2 :(得分:0)

在我的情况下,我不得不从这个文件夹中删除EntityFramework.dll:

C:\的Windows \ Microsoft.NET \组件\ GAC_MSIL \的EntityFramework