コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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()));
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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);
        }