首先在EF代码中构建数据库,在创建模型时不能使用上下文

时间:2015-01-24 10:06:39

标签: c# entity-framework

之前我曾多次使用过这段代码,而且之前总是有用,但在这个特定的项目中,我无法获得Entity Framework来构建我的数据库。

当我在DbContext类中检查Autos时,我发现了这个:

Context can't be used while the model is being created

  

创建模型时无法使用上下文。如果在OnModelCreating方法中使用上下文,或者同时由多个线程访问相同的上下文实例,则可能抛出此异常。

这是我的OnModelCreating:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Configurations.Add(new CompanyDBConfiguration());
        modelBuilder.Configurations.Add(new ClientDBConfiguration());
        modelBuilder.Configurations.Add(new QuoteDBConfiguration());
        modelBuilder.Configurations.Add(new RoleDBConfiguration());
        modelBuilder.Configurations.Add(new UserDBConfiguration());
        modelBuilder.Configurations.Add(new InvoiceDBConfiguration());
        modelBuilder.Configurations.Add(new JobDBConfiguration());
        modelBuilder.Configurations.Add(new JobStatusDBConfiguration());            
    }

以下是其中一个配置的示例:

public class CompanyDBConfiguration : DBBaseObject<Company>
{

    public CompanyDBConfiguration()
        : base()
    {
        Property(p => p.Companame)
            .HasColumnName("sCompanyname")
            .IsRequired();

        Property(p => p.ContactPerson)
            .HasColumnName("sContactPerson")
            .IsRequired();

        Property(p => p.ContactNumber)
            .HasColumnName("sContactNumber")
            .IsRequired();

        Property(p => p.EmailAddress)
            .HasColumnName("sEmailAddress")
            .IsRequired();

        Property(p => p.PhysicalAddress)
            .HasColumnName("sPhysicalAddres")
            .IsRequired();

        Property(p => p.LicenseKey)
            .HasColumnName("sLicenseKey")
            .IsRequired();

        Property(p => p.LicenseDate)
            .HasColumnName("dtLicenseDate")
            .HasColumnType("datetime")
            .IsRequired();

        ToTable("Companies");
    }
}

有谁能帮我理解这里发生了什么?正如我所说,它已经在我所做的每一个项目中都有效,所以为什么这里没有这个呢?

提前致谢!

1 个答案:

答案 0 :(得分:0)

ToTable是什么(&#34;公司&#34;);办?

我非常确定问题出在哪里 - 除了创建数据上下文之外,您不应该执行额外的工作,尤其是当您在该方法中调用上下文时。