不生成外键测试
This commit is contained in:
@@ -61,23 +61,51 @@ public class NoForeignKeyMigrationsSqlGenerator : SqlServerMigrationsSqlGenerato
|
||||
//}
|
||||
|
||||
// 检查是否是外键索引
|
||||
var table = model?.FindEntityType(operation.Table);
|
||||
if (table != null)
|
||||
{
|
||||
foreach (var foreignKey in table.GetForeignKeys())
|
||||
{
|
||||
// 如果索引列和外键列相同,跳过生成
|
||||
if (operation.Columns.SequenceEqual(foreignKey.Properties.Select(p => p.Name)))
|
||||
{
|
||||
return; // 跳过生成外键索引
|
||||
}
|
||||
}
|
||||
}
|
||||
//var table = model?.FindEntityType(operation.Table);
|
||||
//if (table != null)
|
||||
//{
|
||||
// foreach (var foreignKey in table.GetForeignKeys())
|
||||
// {
|
||||
// // 如果索引列和外键列相同,跳过生成
|
||||
// if (operation.Columns.SequenceEqual(foreignKey.Properties.Select(p => p.Name)))
|
||||
// {
|
||||
// return; // 跳过生成外键索引
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
if (IsForeignKeyIndex(operation, model))
|
||||
return;
|
||||
|
||||
// 非外键索引,调用基类方法正常生成
|
||||
base.Generate(operation, model, builder, terminate);
|
||||
}
|
||||
private bool IsForeignKeyIndex(CreateIndexOperation operation, IModel? model)
|
||||
{
|
||||
var entity = model?
|
||||
.GetEntityTypes()
|
||||
.FirstOrDefault(e =>
|
||||
e.GetTableName() == operation.Table &&
|
||||
e.GetSchema() == operation.Schema);
|
||||
|
||||
if (entity == null)
|
||||
return false;
|
||||
|
||||
var tableId = StoreObjectIdentifier.Table(operation.Table, operation.Schema);
|
||||
|
||||
foreach (var fk in entity.GetForeignKeys())
|
||||
{
|
||||
var cols = fk.Properties
|
||||
.Select(p => p.GetColumnName(tableId))
|
||||
.ToArray();
|
||||
|
||||
if (cols.SequenceEqual(operation.Columns))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -67,7 +67,8 @@ public class IRaCISDBContext : DbContext
|
||||
//https://learn.microsoft.com/zh-cn/ef/core/modeling/relationships/conventions?utm_source=chatgpt.com
|
||||
configurationBuilder.Conventions.Remove(typeof(ForeignKeyIndexConvention));
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
|
||||
Reference in New Issue
Block a user