Skip to content

Commit 5d2a3b1

Browse files
committed
修复tablecreator在有hasdata的时候无法创建表的bug
1 parent 4fab616 commit 5d2a3b1

File tree

3 files changed

+46
-18
lines changed

3 files changed

+46
-18
lines changed

samples/Sample.MySql/DbContexts/DefaultShardingDbContext.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
3333
_configureGlobalFiltersMethodInfo?.MakeGenericMethod(entityType.ClrType)
3434
.Invoke(this, new object[] { modelBuilder, entityType });
3535
}
36+
37+
modelBuilder.Entity<SysUserLogByMonth>().HasData(new SysUserLogByMonth() { Id = "1", Time = DateTime.Now });
38+
modelBuilder.Entity<SysTest>().HasData(new SysTest() { Id = "1", UserId = "123" });
3639
}
3740

3841

samples/Sample.MySql/Startup.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -196,21 +196,21 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
196196
// var shardingRuntimeContext = app.ApplicationServices.GetRequiredService<IShardingRuntimeContext>();
197197
// var entityMetadataManager = shardingRuntimeContext.GetEntityMetadataManager();
198198
// var entityMetadata = entityMetadataManager.TryGet<SysUserMod>();
199-
using (var scope = app.ApplicationServices.CreateScope())
200-
{
201-
var defaultShardingDbContext = scope.ServiceProvider.GetService<DefaultShardingDbContext>();
202-
// if (defaultShardingDbContext.Database.GetPendingMigrations().Any())
203-
{
204-
try
205-
{
206-
207-
defaultShardingDbContext.Database.Migrate();
208-
}
209-
catch (Exception e)
210-
{
211-
}
212-
}
213-
}
199+
// using (var scope = app.ApplicationServices.CreateScope())
200+
// {
201+
// var defaultShardingDbContext = scope.ServiceProvider.GetService<DefaultShardingDbContext>();
202+
// // if (defaultShardingDbContext.Database.GetPendingMigrations().Any())
203+
// {
204+
// try
205+
// {
206+
//
207+
// defaultShardingDbContext.Database.Migrate();
208+
// }
209+
// catch (Exception e)
210+
// {
211+
// }
212+
// }
213+
// }
214214
// using (var scope = app.ApplicationServices.CreateScope())
215215
// {
216216
// var defaultShardingDbContext = scope.ServiceProvider.GetService<OtherDbContext>();

src/ShardingCore/Extensions/DbContextExtension.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,15 +192,23 @@ public static void RemoveDbContextAllRelationModel(this DbContext dbContext)
192192
public static void RemoveDbContextRelationModelSaveOnlyThatIsNamedType(this DbContext dbContext,
193193
Type shardingType)
194194
{
195-
#if !EFCORE2&&!EFCORE3&&!EFCORE5&&!EFCORE6
196-
throw new NotImplementedException();
195+
#if !EFCORE2 && !EFCORE3 && !EFCORE5 && !EFCORE6
196+
1
197197
#endif
198198
#if EFCORE2 ||EFCORE3 ||EFCORE5
199199

200200
var contextModel = dbContext.Model as Model;
201201
#endif
202202
#if EFCORE6
203-
var contextModel = dbContext.GetService<IDesignTimeModel>().Model; ;
203+
var contextModel = dbContext.GetService<IDesignTimeModel>().Model;
204+
var entityTypes = contextModel.GetEntityTypes();
205+
foreach (var entityType in entityTypes)
206+
{
207+
if (entityType.GetFieldValue("_data") is List<object> _data)
208+
{
209+
_data.Clear();
210+
}
211+
}
204212
var contextModelRelationalModel = contextModel.GetRelationalModel() as RelationalModel;
205213
var valueTuples =
206214
contextModelRelationalModel.Tables
@@ -214,6 +222,15 @@ public static void RemoveDbContextRelationModelSaveOnlyThatIsNamedType(this DbCo
214222

215223
#if EFCORE5
216224
var contextModelRelationalModel = contextModel.RelationalModel as RelationalModel;
225+
226+
var entityTypes = contextModel.GetEntityTypes();
227+
foreach (var entityType in entityTypes)
228+
{
229+
if (entityType.GetFieldValue("_data") is List<object> _data)
230+
{
231+
_data.Clear();
232+
}
233+
}
217234
var valueTuples = contextModelRelationalModel.Tables
218235
.Where(o => o.Value.EntityTypeMappings.All(m => m.EntityType.ClrType != shardingType))
219236
.Select(o => o.Key).ToList();
@@ -225,6 +242,14 @@ public static void RemoveDbContextRelationModelSaveOnlyThatIsNamedType(this DbCo
225242
#if EFCORE2 || EFCORE3
226243
var entityTypes =
227244
contextModel.GetFieldValue("_entityTypes") as SortedDictionary<string, EntityType>;
245+
246+
foreach (var entityType in entityTypes)
247+
{
248+
if (entityType.GetFieldValue("_data") is List<object> _data)
249+
{
250+
_data.Clear();
251+
}
252+
}
228253
var list = entityTypes.Where(o=>o.Value.ClrType!=shardingType).Select(o=>o.Key).ToList();
229254
for (int i = 0; i < list.Count; i++)
230255
{

0 commit comments

Comments
 (0)