Note: This issue is about only not creating the constraint in the database. EF will still treat the relationship as constrained. If you want an unconstrained relationship--that is, a relationship where an FK value is non-null but there is no corresponding PK in the database--then please vote for #13146.
I try to use RemoveForeignKey to remove all foreign keys from my DbContext, but it is not usable.
Test DbContext
public class Order
{
public Guid Id { get; set; }
public string Code { get; set; }
public IList<OrderDetail> OrderDetails { get; set; }
}
public class OrderDetail
{
public Guid Id { get; set; }
public Guid OrderId { get; set; }
public int Quantity { get; set; }
}
public class BloggingContextFactory : IDesignTimeDbContextFactory<ConsoleDbContext>
{
public ConsoleDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<ConsoleDbContext>();
optionsBuilder.UseSqlServer("Server=.;Database=Blogging;Integrated Security=True");
return new ConsoleDbContext(optionsBuilder.Options);
}
}
public class ConsoleDbContext : DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
public ConsoleDbContext(DbContextOptions<ConsoleDbContext> dbContextOptions) : base(dbContextOptions)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
foreach (var mutableEntityType in modelBuilder.Model.GetEntityTypes())
{
if (mutableEntityType.ClrType == null)
continue;
// delete all foreign key
foreach (var foreignKey in mutableEntityType.GetForeignKeys().ToList())
{
foreignKey.DeclaringEntityType.RemoveForeignKey(foreignKey.Properties, foreignKey.PrincipalKey,
foreignKey.PrincipalEntityType);
}
}
}
}
The foreign key is still in the generated Snapshot.
[DbContext(typeof(ConsoleDbContext))]
partial class ConsoleDbContextModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
gma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "2.2.4-servicing-10062")
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("ConsoleApp.Order", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<string>("Code");
b.HasKey("Id");
b.ToTable("Orders");
});
modelBuilder.Entity("ConsoleApp.OrderDetail", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd();
b.Property<Guid>("OrderId");
b.Property<int>("Quantity");
b.HasKey("Id");
b.HasIndex("OrderId");
b.ToTable("OrderDetails");
});
modelBuilder.Entity("ConsoleApp.OrderDetail", b =>
{
b.HasOne("ConsoleApp.Order")
.WithMany("OrderDetails")
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.Cascade);
});
gma warning restore 612, 618
}
}
Further technical details
EF Core version: .Net Core 2.2
Database Provider: Microsoft.EntityFrameworkCore.SqlServer 2.2.4
Operating system:
IDE: Visual Studio 2019 16.1.1
Note: This issue is about only not creating the constraint in the database. EF will still treat the relationship as constrained. If you want an unconstrained relationship--that is, a relationship where an FK value is non-null but there is no corresponding PK in the database--then please vote for #13146.
I try to use
RemoveForeignKeyto remove all foreign keys from my DbContext, but it is not usable.Test DbContext
The foreign key is still in the generated
Snapshot.Further technical details
EF Core version: .Net Core 2.2
Database Provider: Microsoft.EntityFrameworkCore.SqlServer 2.2.4
Operating system:
IDE: Visual Studio 2019 16.1.1