繁体   English   中英

实体框架DisplayName不是表名

[英]Entity Framework DisplayName is not the Table Name

我目前正在将.NET RC1升级到RTM。 作为升级过程的一部分,我必须将Entity Framework从7.0.0-rc1升级到1.0.0。 过程在此处进行了描述 ,非常简单。 在此过程中, 表命名约定发生了变化。

我在上下文中将相应的代码添加到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 (我的表)。 如果发生任何更改,我还将使用数据注释和Fluent API将表名映射到模型(我从未保留默认值)。 我不确定这是如何发挥作用的。 喜欢:

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

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

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

我继续寻找可能发生的情况,并从罗文·米勒(Rowan Miller)的公告中发现了以下内容:

对现有应用程序的影响

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

  • 如果要通过模型生成数据库,则可以使用新的迁移方法来应用命名更改(如果使用的是SecureCreated()而不是迁移方法,则可以删除并重新创建数据库)。
  • 手动指定表名以匹配RC1中选择的表名。 这可以在OnModelCreating或[Table]属性中完成。 有关更多信息,请参阅文档。
  • 使用以下部分中的代码来批量配置表名称,以匹配RC1中选择的名称。

阅读完这些内容后,我重新回到代码中,发现有几张表没有[Table]属性或未在OnModelCreating覆盖。 (由于我的团队首先需要使用它们来防止退回默认值,因此在审查中可能会忽略掉它。)

一旦我纠正了这种情况,一切都会按预期进行。 我想分享一下,以防其他人遇到同一问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM