public static class RemoveForeignKeyExetension { public static ModelBuilder RemoveForeignKeys(this ModelBuilder modelBuilder) { var entityTypes = modelBuilder.Model.GetEntityTypes().ToList(); for (int i = 0; i < entityTypes.Count(); i++) { var entityType = entityTypes[i]; var references = entityType.GetDeclaredReferencingForeignKeys().ToList(); using (((Model)entityType.Model).Builder.Metadata.ConventionDispatcher.DelayConventions()) { foreach (var reference in references) { reference.DeclaringEntityType.RemoveForeignKey(reference); } } } return modelBuilder; }
忽略外鍵約束(SQLite)
上述是針對SQL Server所做的測試,理論上MySQL同理,但對於SQLite數據庫,EF Core 3.x提供了全局方案:通過數據連接字符串配置【Foreign Keys = False】全局抑制建立外鍵約束。
optionsBuilder.UseSqlite("Database=sqlite.db;Foreign Keys=False");
官方團隊好像並未提供針對SQL Server或MySQL忽略而不建立外鍵約束而可以加載導航屬性的辦法,只能採取笨拙或者如上所述寫個程序去刪除外鍵約束或者通過註解方式實現。
EFCore 遷移命令移除外鍵
https://www.cnblogs.com/lludcmmcdull/p/13502567.html
https://blog.51cto.com/u_15065850/3444526