【问题标题】:DBContext Method not found (System.MissingMethodException on OnModelCreating())未找到 DBContext 方法(OnModelCreating() 上的 System.MissingMethodException)
【发布时间】:2017-03-09 15:09:47
【问题描述】:

我一直被 DBContext 中 OnModelCreating() 的以下异常所困扰,并努力寻找原因或解决方案。网上也找不到太多帮助。

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

有什么帮助或想法吗?

详情:

我有两种实体类型“应用程序”和“组织”及其实体类型配置如下:

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);
    }
}

数据库上下文:

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);
    }
}

【问题讨论】:

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


    【解决方案1】:

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

    我正在尝试向我的 poco 实体中添加一个新列/属性。

    【讨论】:

      【解决方案2】:

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

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

      作为一种解决方法,我再次将其设为可空。这很有趣,因为我不确定 VS 将可空部分缓存在哪里——当我的截止日期不那么紧迫时,我需要回答这个问题。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-25
        • 1970-01-01
        相关资源
        最近更新 更多