25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,078
1

Как по имени таблицы получить список имен и типов полей таблицы в entity framework?

28.02.2014, 10:04. Показов 3431. Ответов 9
Метки нет (Все метки)

У меня есть библиотека сделанная с использованием ADO.NET. В ней для получения списка наименований полей и их типов по строковому имени таблицы использую следующие процедуры. Сначала по имени таблицы получаю :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public System.Data.DataTable table
        {
            get
            {
                return m_table;
            }
        }
        public bool getTable(string tableName)
        {
            m_tableName = tableName;
            m_dataset.Tables.Clear();
            m_connection.ConnectionString = m_connectionString;
            command = m_connection.CreateCommand();
            command.Connection = m_connection;
            command.CommandText = m_SQLstring+tableName;
            m_adapter.SelectCommand = command;
            m_table.TableName = tableName;
 
            builder = new MySqlCommandBuilder(m_adapter);
            builder.ConflictOption = ConflictOption.OverwriteChanges;
            m_adapter.Fill(m_dataset,tableName);
            try
            {
                builder.GetUpdateCommand();
            }
            catch (Exception)
            {
                
                // это на случай если таблица - это представление
            }
 
            m_bindingSource.DataMember = tableName;
            m_bindingSource.DataSource = m_dataset;
 
            m_bindingSource.CurrentChanged += new System.EventHandler(m_bindingSource_CurrentChanged);
            m_table = m_dataset.Tables[0];
            return true;
        }
Затем достаю список имен полей и их типов:
C#
1
2
3
4
5
6
7
8
9
10
11
private Dictionary<string, Type> m_fieldDictionary = new Dictionary<string,Type>();
        public Dictionary<string, Type> fieldDictionary {
            get {
                m_fieldDictionary.Clear();
 
                foreach (DataColumn column in table.Columns)
                    m_fieldDictionary.Add(column.ColumnName.Trim(), column.DataType);
 
                return m_fieldDictionary;
            }
        }
Но интересно, как это делается в entity framework и , возможно, эту задачу и логичнее решать через ADO.NET?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2014, 10:04
Ответы с готовыми решениями:

Как определить список имен полей в silverlight приложении (entity framework)?
Уважаемые Гуру! В Wpf приложении так определяю список имен и типов полей таблицы:...

Entity Framework Как получить определение таблицы из Базы?
Есть немного странное задание заказчика. Нужно предусмотреть случай, если База Данных изменится...

Как отформатировать столбец таблицы? Entity framework
Не могу отформатировать вывод времени в формате &quot;HH:mm&quot; в datagridview. Изменение DefaultCellStyle...

Как SQL запросом получить список полей таблицы текущей базы данных?
Пробую получить поля таблицы текущей базы данных. Нашёл пример: SELECT COLUMN_NAME FROM...

9
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
28.02.2014, 10:19 2
В EF никак, во всяком случае я не сталкивался.

А что касается DbDataReader, то проще вызвать у него метод GetSchemaTable, он вернет всю инфу по структуре таблицы (и не только).
1
25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,078
28.02.2014, 11:09  [ТС] 3
А как это сделать в silverlight приложении? ( В нем нет System.Data.dll)
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
28.02.2014, 11:12 4
Цитата Сообщение от АТерентьев Посмотреть сообщение
А как это сделать в silverlight приложении? ( В нем нет System.Data.dll)
А вот это из какого приложения?

C#
1
2
3
4
5
6
public System.Data.DataTable table
        {
            get
            {
                return m_table;
            }
0
25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,078
28.02.2014, 11:33  [ТС] 5
Это из WinForms, но эти библиотеки доступны и из WPF, но не silverlight (silverlight приложение выполняется на клиентской машине)

Добавлено через 13 минут
Нашел у себя в wpf -приложении , но думаю и в silverlight тоже подходит:
C#
1
2
3
4
5
            IEnumerable<PropertyInfo> properties = from p in typeof(объект).GetProperties()
                             where (from a in p.GetCustomAttributes(false)
                                    where a is EdmScalarPropertyAttribute
                                    select true).FirstOrDefault()
                             select p;
где EF.объект - это объект контекста. В properties - есть и типы и имена полей.
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
28.02.2014, 11:38 6
Цитата Сообщение от АТерентьев Посмотреть сообщение
Это из WinForms, но эти библиотеки доступны и из WPF, но не silverlight (silverlight приложение выполняется на клиентской машине)
А как вы работаете с данными из silverlight?
0
25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,078
28.02.2014, 11:47  [ТС] 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Metadata.Edm;
using System.Data.EntityClient;
 
namespace EFMetadata
{
  class Program
  {
    static void Main(string[] args)
    {
      //These two lines are needed to load the MetadataWorkspace.
      NorthwindEntities context = new NorthwindEntities();
      MetadataWorkspace mdw = ((EntityConnection)context.Connection).GetMetadataWorkspace();
 
      //Get the table info from Store Model
      var categoriesTable = mdw.GetItem<EntityType>("NorthwindModel.Store.Categories", DataSpace.SSpace);
 
      if (categoriesTable != null)
      {
        Console.WriteLine("Categories Table:");
        foreach (var prop in categoriesTable.Members)
        {
          string info = String.Format("MemberName: {0} ; Type: {1}", prop.Name, prop.BuiltInTypeKind.ToString());
          Console.WriteLine(info);
        }
        Console.ReadLine();
      }
    }
  }
}
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
28.02.2014, 12:03 8
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Вот нарыл, может отсюда что вытяните

C#
1
2
3
4
            var ssSpaceSet = context.MetadataWorkspace
    .GetItems<EntityContainer>(DataSpace.SSpace).First()
    .BaseEntitySets
    .First(meta => meta.ElementType.Name == "YourEntityName");
1
25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,078
28.02.2014, 16:11  [ТС] 9
Спасибо, большое!
Я выше привел свою реализацию, просто сделал и забыл - она рабочая, использую при построении отчетов.
А второй развернутый пример - проще для первого ознакомления. И эти оба и ваш вариант, делают примерно одно и то же.

Добавлено через 4 часа 2 минуты
К сожалению , пока не нашел как это сделать рабочий вариант в silverlight. Не нашел библиотеки, в которой определен EdmScalarPropertyAttribute. Any ideas?
0
25 / 24 / 17
Регистрация: 16.10.2009
Сообщений: 1,078
03.03.2014, 10:49  [ТС] 10
Выражение
C#
1
IEnumerable<PropertyInfo> properties = from p in typeof(events).GetProperties() select p;
Дает множество свойств, которое содержит нужные имя и тип свойства, например:
C#
1
2
properties.ElementAt(1).Name  -  имя
properties.ElementAt(1).PropertyType - тип
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2014, 10:49

Entity framework. Как объединить таблицы по двум условиям?
Всем привет. Кто пользовался EF подскажите пожалуйста как объединить таблицы по двум условиям ...

Как ограничить выборку из связанной таблицы в Entity Framework
Уважаемые Гуру! Есть таблица autos механизмов и подчиненная таблица с данными от gps - gpskadrs....

Entity framework - как выводятся таблицы из базы данных посредством DataGridView?
В общем у меня есть база данных sql, подключенная к студии с помощью EF, на форме выводятся таблицы...

SQLite, получить список полей таблицы
всем привет есть БД как получить имена полей из таблицы?

Entity framework и связи таблицы
Есть таблица каталог в ней возможно создать дерево каталогов Таблица 1 Guid parentguid title...

Entity Framework, наследования таблицы с лайками
у меня есть следующие сущности. public abstract class LikeBase { public int Id {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.