[英]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.