实体框架DisplayName不是表名

时间:2016-08-09 20:38:46

标签: c# entity-framework asp.net-core entity-framework-core

我目前正在将.NET RC1升级到RTM。作为升级过程的一部分,我必须将Entity Framework从7.0.0-rc1升级到1.0.0。 process is described here非常简单明了。作为该流程的一部分,table naming conventions已发生变化。

我在相应的上下文中将相应的代码添加到OnModelCreating

foreach (var entity in builder.Model.GetEntityTypes())
{
    entity.Relational().TableName = entity.DisplayName();
    //System.Diagnostics.Debug.WriteLine($"Model = {entity.Model}");
    //System.Diagnostics.Debug.WriteLine($"Name = {entity.Name}");
    //System.Diagnostics.Debug.WriteLine($"Model = {entity.DisplayName()}");
}

正如您所看到的,我打印出一些信息,因为映射没有正确发生。在这些输出中,DisplayName仍然是默认值。因此,Gender(我的模型)不会映射到GenderLookup(我的表)。如果它改变了什么,我也使用Data Annotations和Fluent API将我的表名映射到我的模型(我从不保留默认值)。我不确定这是如何发挥作用的。像:

[Table("GenderLookup")]
public class Gender
{
   // ...
}

builder.Entity<ApplicationUser>().ToTable("PreExistingUser");

我可能在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我继续搜索可能发生的事情,并发现了this announcement from Rowan Miller,其中说明了以下内容:

  

对现有应用的影响

     

如果您将应用程序从RC1升级到RC2,您有以下几种选择:

     
      
  • 如果要从模型生成数据库,则可以构建新迁移以应用命名更改(如果使用EnsureCreated()而不是迁移,则删除并重新创建数据库。
  •   
  • 手动指定表名以匹配RC1中选择的名称。这可以在OnModelCreating中或使用[Table]属性完成。 See the docs for more info.
  •   
  • 使用以下部分中的代码批量配置表名以匹配在RC1中选择的内容。
  •   

阅读完之后,我回到我的代码中,发现有几个表没有$ telnet ANDROMEDA 27017 属性或[Table]未涵盖。 (由于我的团队需要使用这些来防止首先出现在默认设置上,因此在审核中可能会错过这一点。)

一旦我纠正了这种情况,一切都按预期进行。我希望分享以防其他任何人遇到同样的问题。