从EF 6.0 Beta升级到RC后出现System.MissingMethodException异常

4

这是什么意思?

System.MissingMethodException由用户代码未处理
HResult=-2146233069 Message=找不到方法: 'System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration System.Data.Entity.ModelConfiguration.Configuration.StructuralTypeConfiguration1.Property(System.Linq.Expressions.Expression12<!0,!!0>>)。 Source=Att.Uds.DataLayerMappings StackTrace: at Att.Uds.DataLayerMappings.ItemTypeItemConfiguration..ctor() at Att.Uds.DataLayerMappings.UdsContext.OnModelCreating(DbModelBuilder modelBuilder) in c:\TFS\ATS-MSDev\UDS\Dev\Code\Att.Uds.DataLayerMappings\UdsContext.cs:line 163 at System.Data.Entity.DbContext.CallOnModelCreating(DbModelBuilder modelBuilder) at System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder() at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) at System.Data.Entity.Internal.RetryLazy2.GetValue(TInput input) 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();
      }
    }
  }
}

谢谢你


您可以在codeplex网站上报告beta版的错误。 - Hans Passant
1
看起来你是针对一个版本进行构建,但实际上运行的是另一个版本,其中公共API已更改。EF旨在进行bin部署 - 因此,您应该针对与应用程序一起复制的版本运行。因此,要么由于某种原因,您正在复制与项目构建不同的版本,要么EntityFramework.dll已在您的计算机上GACed(GAC获胜)(这是不推荐的),要么根本不复制EF.dll,并且类型加载器在其搜索路径中找到另一个/错误的版本并使用它。 - Pawel
3个回答

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>

当您移除软件包时,您需要将引用从net40更改为net45,以产生相同的行为。


6

我遇到了同样的错误。 这个方法对我有效:

  1. 在包管理器控制台中卸载 EntityFramework 包。
  2. 从“packages”文件夹中删除 EntityFramework 文件夹。
  3. 在包管理器控制台中安装 EntityFramework 包。

1
这些步骤对我很有效 - 谢谢。在我的情况下,导致这个问题的触发器是从.NET 4.0升级到4.5,并安装了EF v6.1.2。通过遵循这些步骤,EF最终被升级到v6.1.3。无论是清理方面还是EF小修订升级方面解决了它,我不确定百分之百。 - BCA

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

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\EntityFramework


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