internal void RunStarted(ModelBuilderSettings modelBuilderSettings, CodeFirstModelGenerator codeFirstModelGenerator, Dictionary <string, string> replacementsDictionary) { try { var contextClassName = new CodeIdentifierUtils( modelBuilderSettings.VSApplicationType, _vsUtils.GetLanguageForProject(modelBuilderSettings.Project)) .CreateValidIdentifier(replacementsDictionary["$safeitemname$"]); _generatedCode = codeFirstModelGenerator.Generate( modelBuilderSettings.ModelBuilderEngine != null ? modelBuilderSettings.ModelBuilderEngine.Model : null, replacementsDictionary["$rootnamespace$"], contextClassName, modelBuilderSettings.SaveConnectionStringInAppConfig ? modelBuilderSettings.AppConfigConnectionPropertyName : contextClassName).ToList(); Debug.Assert(_generatedCode.Count > 0, "code has not been generated"); replacementsDictionary["$contextfilecontents$"] = _generatedCode[0].Value; } catch (CodeFirstModelGenerationException e) { _vsUtils.ShowErrorDialog( string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", e.Message, Environment.NewLine, e.InnerException)); } }
public IEnumerable <KeyValuePair <string, string> > generate(string connectionString, string projectName, string @namespace, DatabaseSetting dbSetting) { try { DatabaseManager dbManager = new DatabaseManager(connectionString, dbSetting); if (!dbManager.connect()) { return(null); } var schemaFilterEntryBag = new SchemaFilterEntryBag(); var databaseTables = new ArrayList(); databaseTables = dbManager.GetDatabaseTables(); if (databaseTables.Count != 0) { for (var i = 0; i < databaseTables.Count; i++) { var tableItem = (Tuple <string, string, string>)(databaseTables[i]); var item = new EntityStoreSchemaFilterEntry(tableItem.Item1, tableItem.Item2, tableItem.Item3, EntityStoreSchemaFilterObjectTypes.Table, EntityStoreSchemaFilterEffect.Allow); schemaFilterEntryBag.IncludedTableEntries.Add(item); } } var databaseViews = new ArrayList(); databaseViews = dbManager.GetDatabaseViews(); if (databaseViews.Count != 0) { for (var i = 0; i < databaseViews.Count; i++) { var viewItem = (Tuple <string, string, string>)(databaseViews[i]); var item = new EntityStoreSchemaFilterEntry(viewItem.Item1, viewItem.Item2, viewItem.Item3, EntityStoreSchemaFilterObjectTypes.View, EntityStoreSchemaFilterEffect.Allow); schemaFilterEntryBag.IncludedViewEntries.Add(item); } } var modelBuilderSettings = new ModelBuilderSettings(); modelBuilderSettings._designTimeConnectionString = connectionString; modelBuilderSettings._designTimeProviderInvariantName = dbSetting.ProviderInvariantName; modelBuilderSettings._runtimeProviderInvariantName = dbSetting.ProviderInvariantName; modelBuilderSettings.UsePluralizationService = true; modelBuilderSettings.IncludeForeignKeysInModel = true; modelBuilderSettings.DatabaseObjectFilters = schemaFilterEntryBag.CollapseAndOptimize(SchemaFilterPolicy.GetByValEdmxPolicy()); modelBuilderSettings.ModelBuilderEngine = new CodeFirstModelBuilderEngine(); // The latest EntityFramework version modelBuilderSettings.TargetSchemaVersion = new Version(3, 0, 0, 0); // Get the providerManifestTokern IDbDependencyResolver resolver = Microsoft.Data.Entity.Design.VersioningFacade.DependencyResolver.Instance; var providerServices = resolver.GetService <System.Data.Entity.Core.Common.DbProviderServices>(dbSetting.ProviderInvariantName); var factory = DbProviderFactories.GetFactory(dbSetting.ProviderInvariantName); var dbconnection = factory.CreateConnection(); dbconnection.ConnectionString = connectionString; Debug.Assert(providerServices != null, "Trying to get unregistered provider."); modelBuilderSettings.ProviderManifestToken = providerServices.GetProviderManifestToken(dbconnection); // the function provided by EntityFramework to generate model from a database var mbe = modelBuilderSettings.ModelBuilderEngine; mbe.GenerateModel(modelBuilderSettings); // the function provided by EntityFramework to generate code from a model var generator = new CodeFirstModelGenerator(); var result = generator.Generate(mbe.Model, @namespace + ".Models", projectName + "DbContext", projectName); string key = projectName + "DbContext.cs"; if (dbSetting.DBType == DatabaseType.MYSQL) { return(result.Where(c => !c.Key.Equals(key)).Concat( new[] { new KeyValuePair <string, string>(key, addMySqlNamespace(result.First(c => c.Key.Equals(key)).Value)) })); } return(result); } catch (Exception e) { Console.WriteLine(e.Message); return(null); } }