Open
Description
openedon May 30, 2019
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment