Есть ли что-либо, встроенное в .Net или визуальную студию, которая позволит мне создавать классы, основанные на таблице MySql. Наверное, я говорю о настойчивости. Я просто хочу, чтобы класс был отображением таблицы 1 на 1. Существует ли что-нибудь свободное?
Создание классов С# на основе таблицы MySQL
Ответ 1
возможно вам нужно что-то вроде этого:
select 'my_table' into @table; #table name
select 'my_database' into @schema; #database name
select concat('public class ',@table,'{') union
select concat('public ',tps.dest,' ',column_name,'{get;set;}') from information_schema.columns c
join( #datatypes mapping
select 'char' as orign ,'string' as dest union all
select 'varchar' ,'string' union all
select 'longtext' ,'string' union all
select 'datetime' ,'DateTime?' union all
select 'text' ,'string' union all
select 'bit' ,'int?' union all
select 'bigint' ,'int?' union all
select 'int' ,'int?' union all
select 'double' ,'double?' union all
select 'decimal' ,'double?' union all
select 'date' ,'DateTime?' union all
select 'tinyint' ,'bool?'
) tps on c.data_type like tps.orign
where [email protected] and [email protected] union
select '}';
Ответ 2
Я скорректировал sql MeelStorm, потому что в нем появлялись некоторые ошибки в отношении языка. Я также помещаю другие типы данных, и я отбрасываю объявление класса, потому что это не нужно для меня. Итак, конечный результат:
select concat('public ',tps.dest,' ',column_name,'{get;set;}') as code
from information_schema.columns c
join(
select 'char' as orign ,'string' as dest union all
select 'varchar' ,'string' union all
select 'longtext' ,'string' union all
select 'datetime' ,'DateTime' union all
select 'text' ,'string' union all
select 'bit' ,'int' union all
select 'bigint' ,'int' union all
select 'int' ,'int' union all
select 'double' ,'double' union all
select 'decimal' ,'double' union all
select 'date' ,'DateTime' union all
select 'tinyint' ,'bool'
) tps on c.data_type like tps.orign
where table_schema='your_schema' and table_name='your_table'
order by c.ordinal_position
Надеюсь, это поможет. Ура!
Ответ 3
вот большая работа:
http://www.code4copy.com/post/generate-c-sharp-model-class-mysql-table
Создайте процедуру следующим образом:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GenCSharpModel`(in pTableName VARCHAR(255) )
BEGIN
DECLARE vClassName varchar(255);
declare vClassCode mediumtext;
declare v_codeChunk varchar(1024);
DECLARE v_finished INTEGER DEFAULT 0;
DEClARE code_cursor CURSOR FOR
SELECT code FROM temp1;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
set vClassCode ='';
/* Make class name*/
SELECT (CASE WHEN col1 = col2 THEN col1 ELSE concat(col1,col2) END) into vClassName
FROM(
SELECT CONCAT(UCASE(MID(ColumnName1,1,1)),LCASE(MID(ColumnName1,2))) as col1,
CONCAT(UCASE(MID(ColumnName2,1,1)),LCASE(MID(ColumnName2,2))) as col2
FROM
(SELECT SUBSTRING_INDEX(pTableName, '_', -1) as ColumnName2,
SUBSTRING_INDEX(pTableName, '_', 1) as ColumnName1) A) B;
/*store all properties into temp table*/
CREATE TEMPORARY TABLE IF NOT EXISTS temp1 ENGINE=MyISAM
as (
select concat( 'public ', ColumnType , ' ' , FieldName,' { get; set; }') code
FROM(
SELECT (CASE WHEN col1 = col2 THEN col1 ELSE concat(col1,col2) END) AS FieldName,
case DATA_TYPE
when 'bigint' then 'long'
when 'binary' then 'byte[]'
when 'bit' then 'bool'
when 'char' then 'string'
when 'date' then 'DateTime'
when 'datetime' then 'DateTime'
when 'datetime2' then 'DateTime'
when 'datetimeoffset' then 'DateTimeOffset'
when 'decimal' then 'decimal'
when 'float' then 'float'
when 'image' then 'byte[]'
when 'int' then 'int'
when 'money' then 'decimal'
when 'nchar' then 'char'
when 'ntext' then 'string'
when 'numeric' then 'decimal'
when 'nvarchar' then 'string'
when 'real' then 'double'
when 'smalldatetime' then 'DateTime'
when 'smallint' then 'short'
when 'mediumint' then 'INT'
when 'smallmoney' then 'decimal'
when 'text' then 'string'
when 'time' then 'TimeSpan'
when 'timestamp' then 'DateTime'
when 'tinyint' then 'byte'
when 'uniqueidentifier' then 'Guid'
when 'varbinary' then 'byte[]'
when 'varchar' then 'string'
when 'year' THEN 'UINT'
else 'UNKNOWN_' + DATA_TYPE
end ColumnType
FROM(
select CONCAT(UCASE(MID(ColumnName1,1,1)),LCASE(MID(ColumnName1,2))) as col1,
CONCAT(UCASE(MID(ColumnName2,1,1)),LCASE(MID(ColumnName2,2))) as col2, DATA_TYPE
from
(SELECT SUBSTRING_INDEX(COLUMN_NAME, '_', -1) as ColumnName2,
SUBSTRING_INDEX(COLUMN_NAME, '_', 1) as ColumnName1,
DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = pTableName) A) B)C);
set vClassCode = '';
/* concat all properties*/
OPEN code_cursor;
get_code: LOOP
FETCH code_cursor INTO v_codeChunk;
IF v_finished = 1 THEN
LEAVE get_code;
END IF;
-- build code
select CONCAT(vClassCode,'\r\n', v_codeChunk) into vClassCode ;
END LOOP get_code;
CLOSE code_cursor;
drop table temp1;
/*make class*/
select concat('public class ',vClassName,'\r\n{', vClassCode,'\r\n}');
END
Однако потребуется небольшая ручная работа.
Ответ 4
Для этого вы можете использовать Entity Framework. Он хорошо сочетается с MySQL. Я следую этому руководству: http://www.devart.com/dotconnect/mysql/articles/tutorial_ef.html
Ответ 5
похоже, есть способ заставить EntityFramework работать с MySQL
Ответ 6
Вы также можете использовать LINQ to SQL с MySQL. Но тогда вам нужно немного исследовать, чтобы найти нужного провайдера, который вам нужно будет установить.
Я думаю, что он в значительной степени охватывает это:
Ответ 7
NHibernate может подключаться к MySQL и бесплатно:
http://community.jboss.org/wiki/DatabasesSupportedByNHibernate
Ответ 8
Subsonic (open source) работает с MySQL (5.0+) со специальной поддержкой InnoDB -
Ответ 9
Я использую NHibernate с MyGeneration
MyGeneration - это программа, которая может читать вашу схему базы данных и генерировать код на основе шаблона (в случае NHibernate, Entities and Mappings)
Ответ 10
Таблица базы данных для объекта С#
Создать класс С# из таблицы базы данных
Настольное приложение WPF
Ответ 11
Первый пример очень хороший, но некоторые типы отсутствуют, поэтому я делюсь добавлением отсутствующих типов (set, float и т.д..)
select 'table_name' INTO @table; #table name
select 'db_name' into @schema; #database name
select concat('public class ',@table,'{') union
select concat('public ',tps.dest,' ',column_name,'{get;set;}') from information_schema.columns c
join( #datatypes mapping
select 'char' as orign ,'string' as dest union all
select 'varchar' ,'string' union all
select 'longtext' ,'string' union all
select 'datetime' ,'DateTime?' union all
select 'text' ,'string' union all
select 'bit' ,'int?' union all
select 'shorte_prodottoe_prodotto' ,'int?' union all
select 'bigint' ,'int?' union all
select 'float' ,'float' union all
select 'smallint' ,'sbyte' union all
select 'int' ,'int?' union all
select 'double' ,'double?' union all
select 'decimal' ,'double?' union all
select 'date' ,'DateTime?' union all
select 'boolean' ,'bool' union all
select 'set' ,'string' union all
select 'tinyint' ,'bool?'
) tps on c.data_type like tps.orign
where [email protected] and [email protected] union
select '}';