使用EF Core的CodeFirst建模数据库(我的数据库是MySql)时,在上下文类中做一些数据库的配置时,比如HasForeignKey之类的,正常在OnModelCreating配置时,代码如下:
modelBuilder.Entity<Post>(entity => { entity.HasOne(d => d.Blog) .WithMany(p => p.Post) .HasForeignKey(d => d.BlogId); });
在MySql数据库中却不能显示出外键,这就很迷。而且有时候我需要修改已经使用CodeFirst生成的列,比如:
modelBuilder.Entity<Post>(entity => { entity.Property(p=>p.Content).HasColumnName("PostContents").HasColumnType("text").IsRequired(); });
然后,我将列名修改为Contents时:
modelBuilder.Entity<Post>(entity => { entity.Property(p=>p.Content).HasColumnName("Contents").HasColumnType("text").IsRequired(); });
就如此配置,一开始是没有报错,但是MySql数据库中的列名没有改过来,不知道为什么,怎么刷新也没有用。实在不知道是我代码有问题还是别的问题。但是我重新配置了另外的一个示例项目就没有问题,而这个项目就有问题。
碰到这种情况,吓得吓死了,当然一般都是说明最基础的EF知识,都没掌握好。
很简单,还技术债务。创建一个最简单的项目,啥都没有,只有EF,然后把你说的这些情况都一一测试一遍,
最好再对照着微软的EF教程演练一遍,看看别人怎么做的,什么特殊情况怎么处理。
否则下次还是这样。
EF是可以拿起来就用,不代表不用学习各种不同情况的处理。
微软教程练习一遍:
ASP.NET Core MVC with Entity Framework Core - Tutorial 1 of 10
我也是这么觉得的,的确是在还技术债,我目前打算测试的解决方法是在ef core的code first中使用alter原生sql语句来修改数据库
迁移了吗?
并没有
目前的打算是测试下原生的alter语句来修改。
@又见阿郎: 那你扯啥..又不迁移.又要ef按你的想法去自动改数据库结构?
@吴瑞祥: 刚刚回复错了,我看成了解决了吗。迁移了,不迁移数据库里面怎么有列名,我要的是修改了dbcontext的onmodelcreating方法之后,并使用efcore命令add-migration等生成新的数据库中没有我需要删除的那列。你这个问题也问的有意思。