예제 #1
0
        private static void CreateTableDescriptor()
        {
            var result = new Dictionary <Type, TableDescriptor>();

            // 构建表描述符。
            TableKinds.ForEach(p =>
            {
                var textName = Settings.Get <string>(p.Value);

                HelperTools.SplitTableNames(textName).ForEach(name =>
                {
                    var entityType = ConvertToEntityType(name);
                    var tableName  = ConvertToTableName(entityType);

                    if (result.ContainsKey(entityType))
                    {
                        throw new ArgumentException(string.Format("{0} 重复配置。", name));
                    }

                    result[entityType] = new TableDescriptor {
                        EntityType = entityType, Name = tableName, TableKind = p.Key
                    };
                });
            });

            TableDescriptors = new ReadOnlyDictionary <Type, TableDescriptor>(result);
        }
예제 #2
0
        public static DbConfiguration GetOrCreateDbConfiguration(string dbSourceName, bool validateSchema)
        {
            if (!Acl.Data.Configuration.DbConfiguration.Items.TryGetValue(dbSourceName, out DbConfiguration cfg))
            {
                // 获取 exe.config 中的连接字符串。
                var connectSettings = ConfigurationManager.ConnectionStrings.OfType <ConnectionStringSettings>()
                                      .Where(p => p.Name == dbSourceName).FirstOrDefault();

                if (connectSettings != null)
                {
                    cfg = DbConfiguration.Configure(dbSourceName);
                }
                else
                {
                    var dataSrc = DataSources.Values.Where(p => p.Name == dbSourceName).FirstOrDefault();
                    if (dataSrc == null)
                    {
                        throw new Exception(string.Format("没有找到 DataSource={0} 的配置 。", dbSourceName));
                    }

                    var urlFixed = dataSrc.Url;
                    if (dataSrc.Driver.Contains("SQLite"))
                    {
                        urlFixed = HelperTools.FixSQLiteDbUrl(dataSrc.Url);
                    }
                    cfg = DbConfiguration.Configure(urlFixed, dataSrc.Driver, dbSourceName);
                }

                // 设置表名复数策略
                cfg.SetMappingConversion(MappingConversion.Plural);

                // 添加DB表映射。
                if (DataSources.ContainsKey(dbSourceName))
                {
                    DataSources[dbSourceName].TableDescriptors.ForEach(p => cfg.ModelBuilder.AddClass(p.Value.EntityType));
                }

                // 验证Schema
                if (validateSchema)
                {
                    cfg.ModelBuilder.ValidateSchema();
                }
            }

            return(cfg);
        }