http://chriseelmaa.com/entity...
internal static class DatabaseUtils { /// <summary> /// Builds the connection string for Entity framework. /// </summary> /// <returns></returns> public static EntityConnection BuildConnection() { var config = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"]; var builder = new EntityConnectionStringBuilder(); builder.Provider = config.ProviderName; //Oracle.ManagedDataAccess.Client builder.ProviderConnectionString = config.ConnectionString; //注意大写 string schema = Regex.Match(config.ConnectionString,@"(?<=User ID=)[^;]+",RegexOptions.IgnoreCase).Value; return CreateConnection(schema,builder,"Model"); } /// <summary> /// Creates the EntityConnection,based on new schema & existing connectionString /// </summary> /// <param name="schemaName">Name of the schema.</param> /// <param name="connectionBuilder"></param> /// <param name="modelName">Name of the model.</param> /// <returns></returns> private static EntityConnection CreateConnection(string schemaName,EntityConnectionStringBuilder connectionBuilder,string modelName) { Func<string,Stream> generateStream = extension => Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Concat(modelName,extension)); Action<IEnumerable<Stream>> disposeCollection = streams => { if (streams == null) return; foreach (var stream in streams.Where(stream => stream != null)) stream.dispose(); }; var conceptualReader = generateStream(".csdl"); var mappingReader = generateStream(".msl"); var storageReader = generateStream(".ssdl"); if (conceptualReader == null || mappingReader == null || storageReader == null) { disposeCollection(new[] { conceptualReader,mappingReader,storageReader }); return null; } var storageXml = XElement.Load(storageReader); foreach (var entitySet in storageXml.Descendants()) { var schemaAttribute = entitySet.Attributes("Schema").FirstOrDefault(); if (schemaAttribute != null) schemaAttribute.SetValue(schemaName); } storageXml.CreateReader(); var workspace = new MetadataWorkspace(); var storageCollection = new StoreItemCollection(new[] { storageXml.CreateReader() }); var conceptualCollection = new EdmItemCollection(new[] { XmlReader.Create(conceptualReader) }); var mappingCollection = new StorageMappingItemCollection(conceptualCollection,storageCollection,new[] { XmlReader.Create(mappingReader) }); workspace.RegisterItemCollection(conceptualCollection); workspace.RegisterItemCollection(storageCollection); workspace.RegisterItemCollection(mappingCollection); var connection = DbProviderFactories.GetFactory(connectionBuilder.Provider).CreateConnection(); if (connection == null) { disposeCollection(new[] { conceptualReader,storageReader }); return null; } connection.ConnectionString = connectionBuilder.ProviderConnectionString; return new EntityConnection(workspace,connection); } }
原文地址:https://www.jb51.cc/oracle/212372.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。