找不到DBContext方法(OnModelCreating()上的System.MissingMethodException)

时间:2017-03-09 15:09:48

标签: ef-code-first entity-framework-6 ef-code-first-mapping

我在DBContext中遇到了来自OnModelCreating()的异常,并努力寻找原因或解决方案。无法在网上找到很多帮助。

 {System.MissingMethodException: Method not found: 'System.Nullable`1<Int32> Models.Application.get_AddrSeqNum()'. at Data.Configuration.ApplicationConfiguration..ctor()

请问任何帮助或想法?

详细说明:

我有两种实体类型&#39;应用程序&#39;和&#39;组织&#39;和他们的实体类型配置如下:

public  class Application
{
   public int ApplId { get; set; }
   public int? OrganizationId { get; set; } // Compsite FK (maps to ExternalId in Organization)
   public int? AddrSeqNum { get; set; } // Compsite FK (maps to AddrSeqNum)
   public virtual Organization Organization { get; set; }     
}

public class Organization
{       
    public int Id { get; set; }
    /// <summary>
    /// Organization ID
    /// </summary>
    public int ExternalId { get; set; }
    public int AddrSeqNum { get; set; }        
}

public class ApplicationConfiguration : EntityTypeConfiguration<Application>
{
    ToTable("Application");            

    HasKey(e => e.ApplId)
      .Property(e => e.ApplId)
      .HasColumnName("appl_id")
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

     Property(e => e.AddrSeqNum)
          .HasColumnName("addr_seq_num");

     // Relationship
     HasOptional(e => e.Organization)
            .WithMany()
            .HasForeignKey(e => new { e.OrganizationId, e.AddrSeqNum });
}

public class OrganizationConfiguration : EntityTypeConfiguration<Organization>
{
    public OrganizationConfiguration()
    {
        ToTable("Organization");

        HasKey(e => new { e.ExternalId, e.AddrSeqNum }); // Compsite Unique key in table

        Property(e => e.ExternalId)
            .HasColumnName("external_id");

        Property(e => e.AddrSeqNum)
           .HasColumnName("addr_sequence");

        Property(e => e.Id)
            .HasColumnName("Id") // Primary key (auto increment)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    }

}

的DbContext:

public partial class AppDbContext : DbContext
{
    public AppDbContext ()
    {
        Configuration.LazyLoadingEnabled = true;
        Configuration.ProxyCreationEnabled = false;
        //Configuration.AutoDetectChangesEnabled = false;

        DbInterception.Add(new FtsInterceptor());
        Database.Log = (msg) => Logger.Debug(msg);
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        modelBuilder.Configurations  // <<- Exception from here
            .Add(new ApplicationConfiguration())                
            .Add(new OrganizationConfiguration())
        base.OnModelCreating(modelBuilder);
    }
}

2 个答案:

答案 0 :(得分:0)

这是一个奇怪的情况,对我的pocos的项目的引用不同步,并且在我构建我的解决方案时没有重建。其中一个项目是面向x86平台的Workflow控制台应用。我为了sln中的所有项目改为AnyCPU。而且神奇地再次工作了。

我试图在我的poco实体的ine中添加一个新的列/属性。

答案 1 :(得分:0)

我也遇到了这个问题,因为我使一个可以为空的数据库列不可为空,而Visual Studio似乎并不想配合这个更改。

删除bin和obj文件夹,以及重建,似乎没有这样做。

作为一种解决方法,我只是让它再次可以为空了。这很有意思,因为我不确定VS在哪里缓存可空的部分 - 当我处于不太紧迫的期限时,这个问题需要回答。 :)