public virtual bool CompatibleWithModel( InternalContext internalContext, ModelHashCalculator modelHashCalculator, bool throwIfNoMetadata, DatabaseExistenceState existenceState = DatabaseExistenceState.Unknown) { if (internalContext.CodeFirstModel == null) { if (throwIfNoMetadata) { throw Error.Database_NonCodeFirstCompatibilityCheck(); } return(true); } VersionedModel model = internalContext.QueryForModel(existenceState); if (model != null) { return(internalContext.ModelMatches(model)); } string a = internalContext.QueryForModelHash(); if (a != null) { return(string.Equals(a, modelHashCalculator.Calculate(internalContext.CodeFirstModel), StringComparison.Ordinal)); } if (throwIfNoMetadata) { throw Error.Database_NoDatabaseMetadata(); } return(true); }
private static string ComputeSha256Hash(string input) { byte[] hash = ModelHashCalculator.GetSha256HashAlgorithm().ComputeHash(Encoding.ASCII.GetBytes(input)); StringBuilder stringBuilder = new StringBuilder(hash.Length * 2); foreach (byte num in hash) { stringBuilder.Append(num.ToString("X2", (IFormatProvider)CultureInfo.InvariantCulture)); } return(stringBuilder.ToString()); }
public virtual string Calculate(DbCompiledModel compiledModel) { DbProviderInfo providerInfo = compiledModel.ProviderInfo; DbModelBuilder dbModelBuilder = compiledModel.CachedModelBuilder.Clone(); EdmMetadataContext.ConfigureEdmMetadata(dbModelBuilder.ModelConfiguration); EdmModel database = dbModelBuilder.Build(providerInfo).DatabaseMapping.Database; database.SchemaVersion = 2.0; StringBuilder stringBuilder = new StringBuilder(); StringBuilder output = stringBuilder; XmlWriterSettings settings = new XmlWriterSettings() { Indent = true }; using (XmlWriter xmlWriter = XmlWriter.Create(output, settings)) new SsdlSerializer().Serialize(database, providerInfo.ProviderInvariantName, providerInfo.ProviderManifestToken, xmlWriter, true); return(ModelHashCalculator.ComputeSha256Hash(stringBuilder.ToString())); }
public virtual bool CompatibleWithModel( InternalContext internalContext, ModelHashCalculator modelHashCalculator, bool throwIfNoMetadata, DatabaseExistenceState existenceState = DatabaseExistenceState.Unknown) { DebugCheck.NotNull(internalContext); DebugCheck.NotNull(modelHashCalculator); if (internalContext.CodeFirstModel == null) { if (throwIfNoMetadata) { throw Error.Database_NonCodeFirstCompatibilityCheck(); } return(true); } var model = internalContext.QueryForModel(existenceState); if (model != null) { return(internalContext.ModelMatches(model)); } // Migrations history was not found in the database so fall back to doing a model hash compare // to deal with databases created using EF 4.1 and 4.2. var databaseModelHash = internalContext.QueryForModelHash(); if (databaseModelHash == null) { if (throwIfNoMetadata) { throw Error.Database_NoDatabaseMetadata(); } return(true); } return(String.Equals( databaseModelHash, modelHashCalculator.Calculate(internalContext.CodeFirstModel), StringComparison.Ordinal)); }
public virtual bool CompatibleWithModel( InternalContext internalContext, ModelHashCalculator modelHashCalculator, bool throwIfNoMetadata, DatabaseExistenceState existenceState = DatabaseExistenceState.Unknown) { DebugCheck.NotNull(internalContext); DebugCheck.NotNull(modelHashCalculator); if (internalContext.CodeFirstModel == null) { if (throwIfNoMetadata) { throw Error.Database_NonCodeFirstCompatibilityCheck(); } return true; } var model = internalContext.QueryForModel(existenceState); if (model != null) { return internalContext.ModelMatches(model); } // Migrations history was not found in the database so fall back to doing a model hash compare // to deal with databases created using EF 4.1 and 4.2. var databaseModelHash = internalContext.QueryForModelHash(); if (databaseModelHash == null) { if (throwIfNoMetadata) { throw Error.Database_NoDatabaseMetadata(); } return true; } return String.Equals( databaseModelHash, modelHashCalculator.Calculate(internalContext.CodeFirstModel), StringComparison.Ordinal); }