Jak pobrać wszystkie nazwy kolumn i typów przy użyciu EF Core >= 5 w przypadku gdy nie ma ich zdefiniowanych w DBset<FoodSet>?

0

Mam sytuacje że UI może stworzyć sobie użytkownik, a co za tym idzie to on sobie dodaje nowe kolumny do bazy. Chciałbym móc pobrać wszystkie nazwy kolumn i typy z danej tabeli. Niestety dopóki nie zdefiniuję ich w modelu w EF Core to mi ich nie widzi. Oczywiście nie chce ich definiować, bo może być ich bardzo dużo.. Jak mogę pobrać wszystkie nazwy kolumn i typów z danej tabeli używająć EF Core?

Próbowałem przy użyciu komendy: FromSqlRaw

_dbContext.FoodSet.FromSqlRaw("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'FoodSet'").ToList();

Niestety wywala exceptiona jakby coś było z SQL.

Próbowałem także tak, ale tutaj mam jedynie propertki widoczne z modelu:

            var entityType = _dbContext.Model.FindEntityType("Shared.DataAccess.ScaffoldedEntities.FoodSet");

            // Table info 
            var tableName = entityType.GetTableName();
            var tableSchema = entityType.GetSchema();

            var columnNameAndType = new List<Dictionary<string, string>>();

            foreach (var property in entityType.GetProperties())
            {
                var columnName = property.GetColumnName();
                var columnType = property.GetColumnType();

                var dict = new Dictionary<string, string>();
                dict.Add(columnName, columnType);
                columnNameAndType.Add(dict);
            };

Wydaje mi się, że przy użyciu EF Core musiałym jakoś użyć raw sql bez dbseta i wtedy pobrać wszystkie nazwy kolum itd.

3

Czy ja wiem, czy EF jest tutaj dobrym rozwiązaniem 🤔 Szybciej ogarniesz to chyba Dapperem. EF nie ogarnia takich rzeczy, a już tym bardziej nie RawSQL, ponieważ to działa tylko na DbSet. Bezpośrednio na DbContext "czysty" SQL nie zadziała.

0

Jakby w dziale Javy czytał, Hibernate / JPA brany, by używać surowego SQL-a.
Choć tam przynajmniej niejakie wsparcie - a zarazem ślepa uliczka.

2
balti napisał(a):

Mam sytuacje że UI może stworzyć sobie użytkownik, a co za tym idzie to on sobie dodaje nowe kolumny do bazy. Chciałbym móc pobrać wszystkie nazwy kolumn i typy z danej tabeli.

Mi to pachnie jak dynamiczny rekord EAV (pod taką nazwą znam - może ktoś poprawi nazwę wzorca), tak bym implementował te dane, przy obiektowym designie - bo zawsze zostaje (niemal) czysto SQLowy.
Parą do DynamicRecord jest repozytorium kolumn/typów o jakim mówisz.

BTW nawet jakbyś jakoś pozyskał kolumny, nadal EF będzie ci barierą: nie ma nic wspólnego z dynamicznym klasami.

sobie dodaje nowe kolumny do bazy

to wyklucza EF

1 użytkowników online, w tym zalogowanych: 0, gości: 1