2

我一直被 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);
    }
}
4

2 回答 2

0

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

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

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

于 2017-04-13T22:31:21.963 回答
0

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

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

于 2017-03-09T22:11:20.557 回答