我目前正在将.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");
我可能在这里做错了什么?
答案 0 :(得分:0)
我继续搜索可能发生的事情,并发现了this announcement from Rowan Miller,其中说明了以下内容:
对现有应用的影响
如果您将应用程序从RC1升级到RC2,您有以下几种选择:
- 如果要从模型生成数据库,则可以构建新迁移以应用命名更改(如果使用EnsureCreated()而不是迁移,则删除并重新创建数据库。
- 手动指定表名以匹配RC1中选择的名称。这可以在OnModelCreating中或使用[Table]属性完成。 See the docs for more info.
- 使用以下部分中的代码批量配置表名以匹配在RC1中选择的内容。
阅读完之后,我回到我的代码中,发现有几个表没有$ telnet ANDROMEDA 27017
属性或[Table]
未涵盖。 (由于我的团队需要使用这些来防止首先出现在默认设置上,因此在审核中可能会错过这一点。)
一旦我纠正了这种情况,一切都按预期进行。我希望分享以防其他任何人遇到同样的问题。