【问题标题】:EF Code First table naming issuesEF Code First 表命名问题
【发布时间】:2012-10-18 03:06:46
【问题描述】:

我首先使用 EF 代码构建了一个项目。它还使用表单身份验证。直到最近,会员数据库和应用程序数据库都是分开开发的,但为了简单起见,我想将它们合并到一个数据库中。

我的代码优先模型中的一个类称为“应用程序”,因此 EF 生成的表称为“应用程序”,它与同名的成员表冲突。这是我当前上下文的一个示例:

public partial class ExampleContext : DbContext
{
    public DbSet<Application> Applications { get; set; }
    public DbSet<Status> StatusTypes { get; set; } // notice the name of the property vs the name of the class
}

我认为表名是基于上下文中属性的名称,因为它正在为所有 Status 对象生成一个名为 StatusTypes 的表。但是,如果我将Applications 属性重命名为MyApplications 之类的名称,它仍然会生成一个名为Applications 的表。很明显,这不仅仅是属性的名称,我还遗漏了一些东西。

我的问题:如何让 EF 以不同的方式命名此表?

【问题讨论】:

  • 您使用的是网站项目还是网络应用程序项目?网站项目通常存在这类问题,因为它们不使用命名空间来区分命名范围。
  • 应用程序的前端是一个MVC项目。但是所有实体框架和其他数据库操作都在一个单独的类库中。为什么作为 Web 应用程序会导致 EF 以不同的方式命名?这对我来说没有意义。
  • 命名空间.. 不是名字。命名空间提供了一个名称在其中有效的“范围”。

标签: c# entity-framework


【解决方案1】:

你不能使用配置类来做这样的事情吗:

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

然后在您的上下文中覆盖 OnModelCreating:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ApplicationConfiguration());
    }

这应该会强制你的表被命名为 SpecialApplication 并避免冲突

【讨论】:

    【解决方案2】:

    默认情况下,实体框架代码在从模型类构建数据库时首先会为表生成复数名称。您可以覆盖 db 上下文类的 OnModelCreating 方法,为表指定不同的名称。

    public class YourDBCOntext:DbContext
    {
      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
        modelBuilder.Entity<Applications>().ToTable("MYApplications");
      }    
    }
    

    您也可以全局执行此操作,这样所有表都不会有复数名称。

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

    【讨论】:

      【解决方案3】:

      我刚刚重命名了这个类并且它起作用了。目前最简单的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多