DocSpace-client/common/Tools/AutoMigrationCreator/Core/ModelDifferenceChecker.cs
2021-10-12 17:51:13 +03:00

48 lines
1.6 KiB
C#

using System.Collections.Generic;
using ASC.Core.Common.EF;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Migrations.Design;
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.Extensions.DependencyInjection;
namespace AutoMigrationCreator
{
public class ModelDifferenceChecker
{
private BaseDbContext _dbContext;
public ModelDifferenceChecker(BaseDbContext context)
{
_dbContext = context;
}
public bool IsDifferent()
{
var scaffolderDependecies = EFCoreDesignTimeServices.GetServiceProvider(_dbContext)
.GetService<MigrationsScaffolderDependencies>();
var modelSnapshot = scaffolderDependecies.MigrationsAssembly.ModelSnapshot;
if (modelSnapshot == null) return true;
var lastModel = scaffolderDependecies.SnapshotModelProcessor.Process(modelSnapshot.Model)
.GetRelationalModel();
if (modelSnapshot == null) return true;
var upMethodOperations = scaffolderDependecies.MigrationsModelDiffer.GetDifferences(
lastModel, scaffolderDependecies.Model.GetRelationalModel());
var downMethodOperations = upMethodOperations.Count != 0 ?
scaffolderDependecies.MigrationsModelDiffer.GetDifferences(
scaffolderDependecies.Model.GetRelationalModel(), lastModel)
: new List<MigrationOperation>();
if (upMethodOperations.Count > 0 || downMethodOperations.Count > 0) return true;
return false;
}
}
}