Как я могу сгенерировать класс из табличного объекта SQL Server?
Я не говорю об использовании некоторого ORM. Мне просто нужно создать сущности (простой класс). Что-то вроде:
public class Person
{
public string Name { get;set; }
public string Phone { get;set; }
}
Учитывая некоторые таблицы, такие как:
+----+-------+----------------+
| ID | Name | Phone |
+----+-------+----------------+
| 1 | Alice | (555) 555-5550 |
| 2 | Bob | (555) 555-5551 |
| 3 | Cathy | (555) 555-5552 |
+----+-------+----------------+
c#
sql
sql-server
tsql
графический интерфейс пользователя
источник
источник
Ответы:
Установите @TableName на имя вашей таблицы.
источник
end
иColumnType
в сценарии SQL Алекса.+ CASE WHEN col.is_nullable=1 AND typ.name NOT IN ('binary', 'varbinary', 'image', 'text', 'ntext', 'varchar', 'nvarchar', 'char', 'nchar') THEN '?' ELSE '' END
float' then 'float'
» на «,when 'float' then 'double'
а вы должны изменить»when 'real' then 'double'
на «when 'real' then 'float'
.» Кажется, вы перепутали эти типы. C # эквивалент SQL-плавающего типа double, а C # -эквивалент SQL-фактора - float .print @Result
его,print CAST(@Result AS TEXT)
иначе он будет усечен на больших столах.Я не смог получить ответ Алекса для работы на Sql Server 2008 R2. Итак, я переписал его, используя те же основные принципы. Теперь он позволяет использовать схемы, и было сделано несколько исправлений для сопоставления свойств столбца (включая сопоставление типов дат, допускающих значения NULL, и типов значений C #, допускающих значения NULL). Вот Sql:
Это производит C # как следующее:
Может быть идея использовать EF, Linq to Sql или даже Scaffolding; однако бывают случаи, когда такая часть кода оказывается полезной. Честно говоря, мне не нравится использовать свойства навигации EF, когда генерируемый им код выполнял 19 200 отдельных вызовов базы данных для заполнения сетки из 1000 строк. Это могло быть достигнуто за один вызов базы данных. Тем не менее, возможно, ваш технический архитектор не хочет, чтобы вы использовали EF и тому подобное. Итак, вы должны вернуться к коду, подобному следующему ... Кстати, также может быть идея украсить каждое из свойств атрибутами для DataAnnotations и т. Д., Но я держу это строго POCO.
РЕДАКТИРОВАТЬ Исправлено для TimeStamp и Guid?
источник
VB версия
источник
float
стоит пойтиDouble
,byte[]
чтобыByte()
Немного поздно, но я создал веб-инструмент, помогающий создавать объекты C # (или другие) из результатов SQL, таблиц SQL и SQL SP.
sql2object.com
Это действительно может обезопасить вас от необходимости вводить все ваши свойства и типы.
Если типы не распознаются, будет выбран вариант по умолчанию.
источник
CREATE TABLE
чтобы я мог вырезать и вставлять все. Также, если у вас есть шанс, вы можете добавить туда «Trim ()» - он потерпит неудачу, если в начале будет пустая строка, и тогда люди от нее откажутся. Просто, если вы знаете, чтобы удалить его - но вы потеряете людей, когда выдадите ошибку.Я пытаюсь дать свои 2 цента
0) QueryFirst https://marketplace.visualstudio.com/items?itemName=bbsimonbb.QueryFirst Query-first - это расширение визуальной студии для интеллектуальной работы с SQL в проектах C #. Используйте предоставленный шаблон .sql для разработки ваших запросов. Когда вы сохраняете файл, Query-first выполняет ваш запрос, извлекает схему и генерирует два класса и интерфейс: класс-оболочку с методами Execute (), ExecuteScalar (), ExecuteNonQuery () и т. Д., Соответствующий интерфейс и инкапсуляцию POCO строка результатов.
1) Sql2Objects Создает класс, начиная с результата запроса (но не DAL)
2) https://docs.microsoft.com/en-us/ef/ef6/resources/tools
3) https://visualstudiomagazine.com/articles/2012/12/11/sqlqueryresults-code-generation.aspx
4) http://www.codesmithtools.com/product/generator#features
источник
Да, это здорово, если вы используете простой ORM, такой как Dapper.
Если вы используете .Net, вы можете сгенерировать XSD-файл во время выполнения с любым DataSet, используя метод WriteXmlSchema. http://msdn.microsoft.com/en-us/library/xt7k72x8(v=vs.110).aspx
Как это:
Оттуда вы можете использовать xsd.exe для создания класса, сериализуемого в формате XML из командной строки разработчика. http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx
как это:
источник
Чтобы распечатать NULLABLE свойства, используйте это.
Это добавляет небольшую модификацию в скрипт Алекса Азы для
CASE
блока операторов.источник
Я попытался использовать предложения выше и в процессе улучшил решения в этой теме.
Допустим, вы используете базовый класс (в данном случае ObservableObject), который реализует событие PropertyChanged, вы бы сделали что-то вроде этого. Я, вероятно, напишу сообщение в блоге однажды в моем блоге sqljana.wordpress.com
Пожалуйста, подставьте значения для первых трех переменных:
Базовый класс основан на статье Джоша Смита здесь. http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-which-implements-inotifypropertychanged/
Я переименовал класс в ObservableObject, а также использовал функцию ac # 5 с помощью атрибута CallerMemberName
Вот часть, которая вам, ребята, понравится больше. Я создал скрипт Powershell для генерации всех таблиц в базе данных SQL. Он основан на гуру Powershell по имени командлет Чада Миллера Invoke-SQLCmd2, который можно загрузить здесь: http://gallery.technet.microsoft.com/ScriptCenter/7985b7ef-ed89-4dfd-b02a-433cc4e30894/
Если у вас есть этот командлет, сценарий Powershell, сгенерированный для всех таблиц, становится простым (замените переменные конкретными значениями).
источник
Если у вас есть доступ к SQL Server 2016, вы можете использовать опцию FOR JSON (с INCLUDE_NULL_VALUES), чтобы получить вывод JSON из оператора select. Скопируйте вывод, затем в Visual Studio вставьте специальный -> вставьте JSON как класс.
Вид бюджетного решения, но может сэкономить время.
источник
создать ПРОЦЕДУРУ для создания собственного кода с использованием шаблона
Теперь создайте собственный код
например c # класс
выход
для LINQ
выход
для класса Java
выход
для android sugarOrm модель
выход
источник
Чтобы распечатать NULLABLE свойства с комментариями (резюме), используйте это.
Это небольшая модификация первого ответа
источник
Visual Studio Magazine опубликовал это:
Создание классов .NET POCO для результатов SQL-запросов
У него есть загружаемый проект, который вы можете создать, предоставить ему информацию SQL, и он поможет вам в этом.
Теперь, если этот инструмент только что создал команды SQL для SELECT, INSERT и UPDATE ....
источник
Коммерческий, но CodeSmith Generator делает это: http://www.codesmithtools.com/product/generator
источник
Я не совсем понимаю, что вы хотите из этого, но вот общие варианты при разработке того, что вы хотите разработать.
источник
В благодарность за решение Алекса и Гильерма за то, что я спросил, я сделал это для MySQL, чтобы генерировать классы C #
источник
Возьмите QueryFirst , визуальное расширение студии, которое генерирует классы-оболочки из запросов SQL. Вы не только получаете ...
И как бонус, это добавит ...
Вы уверены, что хотите основывать свои классы непосредственно на ваших столах? Таблицы - это статическое, нормализованное понятие хранения данных, которое принадлежит БД. Классы являются динамическими, текучими, одноразовыми, специфичными для контекста, возможно, денормализованными. Почему бы не написать реальные запросы для данных, которые вы хотите для операции, и позволить QueryFirst генерировать классы из этого.
источник
Этот пост спас меня несколько раз. Я просто хочу добавить свои два цента. Для тех, кто не любит использовать ORM и вместо этого написать свои собственные классы DAL, когда у вас есть 20 столбцов в таблице и 40 различных таблиц с соответствующими операциями CRUD, это болезненно и трата времени. Я повторил приведенный выше код для генерации методов CRUD на основе сущности и свойств таблицы.
Конечно, это не пуленепробиваемый код, и его можно улучшить. Просто хотел внести свой вклад в это отличное решение
источник
слегка измененный сверху ответ:
что делает вывод, необходимый для полного LINQ в объявлении C #
источник
Самый простой способ - EF, Reverse Engineer. http://msdn.microsoft.com/en-US/data/jj593170
источник
Мне нравится устанавливать свои классы с частными местными членами и общедоступными / мутаторами. Так что я изменил сценарий Алекса выше, чтобы сделать это также для всех, кто интересуется.
источник
Небольшое дополнение к решениям ранее:
object_id(@TableName)
работает, только если вы находитесь в схеме по умолчанию.работает в любой схеме при условии, что @tableName уникально.
источник
В случае, если это кому-то еще пригодится, работая над подходом Code-First с использованием отображений атрибутов, я хотел что-то, что просто оставило мне необходимость связывать сущность в объектной модели. Итак, благодаря ответу Карнотавра, я расширил его в соответствии с их собственным предложением и сделал несколько настроек.
Таким образом, это основывается на этом решении, включающем две части, обе из которых являются функциями со скалярным значением SQL:
Использование из MS SQL Management Studio:
приведет к значению столбца, которое вы можете скопировать и вставить в Visual Studio.
Если это кому-нибудь поможет, то отлично!
источник
Здесь я собрал идеи из нескольких ответов на основе SQL, в основном из корневого ответа Алекса Азы, в консольное приложение klassify , которое генерирует сразу все классы для указанной базы данных:
Например, с учетом таблицы,
Users
которая выглядит следующим образом:klassify
сгенерирует файл с именем,Users.cs
который выглядит следующим образом:Он выведет один файл для каждой таблицы. Откажитесь от того, что вы не используете.
использование
источник
Просто подумал, что я добавлю свой вариант ответа для тех, кто заинтересован. Основными функциями являются:
Это добавит атрибуты System.Data.Linq.Mapping к классу и каждому свойству. Полезно для всех, кто использует Linq to SQL.
источник
Вы только что сделали, если ваша таблица содержит два столбца и называется что-то вроде «tblPeople».
Вы всегда можете написать свои собственные обертки SQL. Я на самом деле предпочитаю делать это таким образом, я ненавижу генерировать код любым способом.
Может быть, создать
DAL
класс и вызвать методGetPerson(int id)
, который запрашивает базу данных для этого человека, а затем создает вашPerson
объект из набора результатов.источник