Создание нескольких физических таблиц из одного класса Map в отображении Nhibernate по коду - PullRequest
1 голос
/ 30 июня 2019

У меня есть одно ClassMapping, и я хочу создать несколько физических таблиц, которые не известны во время компиляции.Например, я хочу использовать Table1, Table2, Table3 и т. Д. Из одного класса Map.

Я попробовал следующий код, но преобразователь модели добавляет только один класс Map, и он снова обновляет предыдущую карту классов.Не добавление другой карты классов.

private static ISessionFactory CreateSessionFactory()
    {
        var cfg = new Configuration();
        cfg.CurrentSessionContext<ThreadStaticSessionContext>();
        cfg.Configure();
        var mapper = new ModelMapper();
        mapper.AddMappings(typeof(ClientMap).Assembly.GetTypes());
        AddDynamicTables(mapper);
        cfg.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
        BuildSchema(cfg);
        return cfg.BuildSessionFactory();
    }

private static void AddDynamicTables(ModelMapper mapper)
    {
        var clients = new List<string>() { "First", "Second" };
        foreach (var client in clients)
        {
            var map = new ClassMapping<Rule>();
            map.EntityName("tbl_" + client + "_rules");
            map.Id(x => x.Id);
            map.Property(x => x.RuleId);
            map.Property(x => x.ShortName);
            map.Property(x => x.IsActive);
            map.Property(x => x.Description);
            map.Property(x => x.Type);
            map.Property(x => x.RuleGroup);
            map.Table("tbl_" + client + "_rules");
            mapper.AddMapping(map);
        }
    }

Я думаю, это из-за слияния в customizerHolder.Как мне создать переменное количество таблиц из одного класса Map?

1 Ответ

1 голос
/ 30 июня 2019

Мне удалось создать несколько таблиц на одной карте, создав новый сопоставитель моделей в foreach, используя сопоставление компиляции для каждой и добавив в конфигурацию.

private static void AddDynamicTables(Configuration cfg)
    {
        var clients = new List<string>() { "First", "Second" };
        foreach (var client in clients)
        {
            var mapper = new ModelMapper();
            var map = new ClassMapping<Rule>();
            map.EntityName("tbl_" + client + "_rules");
            map.Property(x=>x.RuleId);
            map.Table("tbl_" + client + "_rules");
            mapper.AddMapping(map);
            var mappings = mapper.CompileMappingForAllExplicitlyAddedEntities();
            cfg.AddMapping(mappings);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...