Example #1
0
        // <summary>
        // Calculates an SHA256 hash of the EDMX from the given code first model. This is the hash stored in
        // the database in the EdmMetadata table in EF 4.1/4.2. The hash is always calculated using a v2 schema
        // as was generated by EF 4.1/4.2 and with the <see cref="EdmMetadata" /> entity included in the model.
        // </summary>
        public virtual string Calculate(DbCompiledModel compiledModel)
        {
            DebugCheck.NotNull(compiledModel);
            DebugCheck.NotNull(compiledModel.ProviderInfo);
            DebugCheck.NotNull(compiledModel.CachedModelBuilder);

            var providerInfo = compiledModel.ProviderInfo;
            var modelBuilder = compiledModel.CachedModelBuilder.Clone();

            // Add back in the EdmMetadata class because the hash created by EF 4.1 and 4.2 will contain it.
            EdmMetadataContext.ConfigureEdmMetadata(modelBuilder.ModelConfiguration);

            var databaseMetadata = modelBuilder.Build(providerInfo).DatabaseMapping.Database;

            databaseMetadata.SchemaVersion = XmlConstants.StoreVersionForV2; // Ensures SSDL version matches that created by EF 4.1/4.2

            var stringBuilder = new StringBuilder();

            using (var xmlWriter = XmlWriter.Create(
                       stringBuilder, new XmlWriterSettings
            {
                Indent = true
            }))
            {
                new SsdlSerializer().Serialize(
                    databaseMetadata,
                    providerInfo.ProviderInvariantName,
                    providerInfo.ProviderManifestToken,
                    xmlWriter);
            }

            return(ComputeSha256Hash(stringBuilder.ToString()));
        }
Example #2
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()));
        }
Example #3
0
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     EdmMetadataContext.ConfigureEdmMetadata(modelBuilder.ModelConfiguration);
 }