Jak mogę wygenerować klasę z obiektu tabeli SQL Server?
Nie mówię o używaniu ORM. Muszę tylko utworzyć byty (prosta klasa). Coś jak:
public class Person
{
public string Name { get;set; }
public string Phone { get;set; }
}
Biorąc pod uwagę tabelę, taką jak:
+----+-------+----------------+
| ID | Name | Phone |
+----+-------+----------------+
| 1 | Alice | (555) 555-5550 |
| 2 | Bob | (555) 555-5551 |
| 3 | Cathy | (555) 555-5552 |
+----+-------+----------------+
c#
sql
sql-server
tsql
Gui
źródło
źródło
Odpowiedzi:
Ustaw @TableName na nazwę swojej tabeli.
źródło
end
i pomiędzy nimiColumnType
.+ 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'
„na”when 'float' then 'double'
i powinieneś zmienić „when 'real' then 'double'
” na „when 'real' then 'float'
.” Wygląda na to, że pomieszałeś te typy. Odpowiednik C # dla SQL float jest podwójny, a C # równoważny SQL real jest float .print @Result
aby wprint CAST(@Result AS TEXT)
przeciwnym razie została obcięta na dużych stołach.Nie mogłem uzyskać odpowiedzi Alexa na Sql Server 2008 R2. Więc przepisałem go, stosując te same podstawowe zasady. Teraz pozwala na schematy i wprowadzono kilka poprawek dla mapowań właściwości kolumn (w tym mapowania dopuszczalnych typów dat na dopuszczalne typy C #). Oto Sql:
Daje C # jak poniżej:
Może być pomysł na użycie EF, Linq na Sql, a nawet Rusztowanie; są jednak chwile, kiedy przydaje się taki fragment kodu. Szczerze mówiąc, nie lubię używać właściwości nawigacji EF, w których generowany przez nią kod wykonał 19 200 osobnych wywołań bazy danych, aby wypełnić siatkę 1000 wierszy. Można to osiągnąć w jednym wywołaniu bazy danych. Niemniej jednak możliwe, że architekt techniczny nie chce, abyś używał EF i tym podobnych. Musisz więc powrócić do takiego kodu ... Nawiasem mówiąc, pomysłem może być także udekorowanie każdej właściwości atrybutami DataAnnotations itp., Ale zachowuję to ściśle POCO.
EDIT Naprawiono dla TimeStamp i Guid?
źródło
Wersja VB
źródło
float
powinien udać sięDouble
,byte[]
abyByte()
Trochę późno, ale stworzyłem narzędzie internetowe, które pomaga tworzyć obiekty C # (lub inne) z wyników SQL, SQL Table i SQL SP.
sql2object.com
To naprawdę może zabezpieczyć cię przed wpisywaniem wszystkich swoich właściwości i typów.
Jeśli typy nie zostaną rozpoznane, zostanie wybrana wartość domyślna.
źródło
CREATE TABLE
rzeczy, dzięki czemu mogę wycinać i wklejać wszystko. Również jeśli masz szansę, możesz dodać „Trim ()” - nie powiedzie się, jeśli na początku jest pusta linia, a następnie ludzie się poddadzą. Proste, jeśli wiesz, jak je usunąć - ale stracisz ludzi, gdy popełnisz błąd.Próbuję dać moje 2 centy
0) QueryFirst https://marketplace.visualstudio.com/items?itemName=bbsimonbb.QueryFirst Query-first to rozszerzenie wizualnego studia do inteligentnej pracy z SQL w projektach C #. Skorzystaj z dostarczonego szablonu .sql, aby opracować swoje zapytania. Po zapisaniu pliku Query-first uruchamia zapytanie, pobiera schemat i generuje dwie klasy i interfejs: klasę opakowania z metodami Execute (), ExecuteScalar (), ExecuteNonQuery () itp., Odpowiedni interfejs oraz enkapsulację POCO linia wyników.
1) Sql2Objects Tworzy klasę zaczynając od wyniku zapytania (ale nie 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
źródło
Tak, są świetne, jeśli używasz prostej ORM, takiej jak Dapper.
Jeśli używasz .Net, możesz wygenerować plik XSD w czasie wykonywania z dowolnym DataSet przy użyciu metody WriteXmlSchema. http://msdn.microsoft.com/en-us/library/xt7k72x8(v=vs.110).aspx
Lubię to:
Stamtąd możesz użyć narzędzia xsd.exe, aby utworzyć klasę XML, którą można serializować z wiersza polecenia programisty. http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110).aspx
lubię to:
źródło
Aby wydrukować właściwości NULLABLE, użyj tego.
Dodaje niewielką modyfikację skryptu Alexa Azy dla
CASE
bloku instrukcji.źródło
Próbowałem wykorzystać powyższe sugestie, a w trakcie procesu ulepszono rozwiązania w tym wątku.
Powiedzmy, że używasz klasy bazowej (w tym przypadku ObservableObject), która implementuje zdarzenie PropertyChanged, zrobiłbyś coś takiego. Prawdopodobnie pewnego dnia napiszę wpis na blogu na moim blogu sqljana.wordpress.com
Proszę zastąpić wartości dla pierwszych trzech zmiennych:
Klasa podstawowa oparta jest na artykule Josha Smitha tutaj. Http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-which-implements-inotifypropertychanged/
Zmieniłem nazwę klasy na ObservableObject, a także skorzystałem z funkcji ac # 5, używając atrybutu CallerMemberName
Oto część, która spodoba wam się bardziej. Zbudowałem skrypt Powershell do generowania dla wszystkich tabel w bazie danych SQL. Opiera się na guru PowerShell o nazwie cmdlet Choke Millera Invoke-SQLCmd2, który można pobrać stąd: http://gallery.technet.microsoft.com/ScriptCenter/7985b7ef-ed89-4dfd-b02a-433cc4e30894/
Po uzyskaniu tego polecenia cmdlet, skrypt Powershell do generowania dla wszystkich tabel staje się prosty (zamień zmienne na określone wartości).
źródło
Jeśli masz dostęp do SQL Server 2016, możesz użyć opcji FOR JSON (z INCLUDE_NULL_VALUES), aby uzyskać dane wyjściowe JSON z instrukcji select. Skopiuj dane wyjściowe, a następnie w Visual Studio, wklej specjalnie -> wklej JSON jako klasę.
Coś w rodzaju rozwiązania budżetowego, ale może zaoszczędzić trochę czasu.
źródło
utwórz PROCEDURĘ, aby utworzyć niestandardowy kod za pomocą szablonu
teraz utwórz niestandardowy kod
na przykład klasa c #
wyjście jest
dla LINQ
wyjście jest
dla klasy java
wyjście jest
dla modelu Android SugarOrm
wyjście jest
źródło
Aby wydrukować właściwości NULLABLE Z KOMENTARZAMI (Podsumowanie), użyj tego.
To niewielka modyfikacja pierwszej odpowiedzi
źródło
Magazyn Visual Studio Magazine opublikował to:
Generowanie klas .NET POCO dla wyników zapytania SQL
Ma projekt do pobrania, który możesz zbudować, podać mu informacje SQL, a on przygotuje dla ciebie klasę.
Teraz, jeśli to narzędzie właśnie utworzyło polecenia SQL dla SELECT, INSERT i UPDATE ....
źródło
Komercyjny, ale CodeSmith Generator robi to: http://www.codesmithtools.com/product/generator
źródło
Jestem zdezorientowany, co chcesz z tego zrobić, ale oto ogólne opcje przy projektowaniu tego, co chcesz zaprojektować.
źródło
W uznaniu dla rozwiązania Alexa i Guilherme za pytanie zrobiłem to dla MySQL do generowania klas C #
źródło
Grab QueryFirst , rozszerzenie Visual Studio, które generuje klasy otoki z zapytań SQL. Dostajesz nie tylko ...
A jako bonus wrzuci ...
Czy na pewno chcesz oprzeć swoje zajęcia bezpośrednio na stołach? Tabele to statyczne, znormalizowane pojęcie przechowywania danych, które należy do bazy danych. Klasy są dynamiczne, płynne, jednorazowe, kontekstowe, być może denormalizowane. Dlaczego nie napisać prawdziwych zapytań o dane, które chcesz wykonać dla operacji, i pozwól QueryFirst wygenerować z nich klasy.
źródło
Ten post uratował mnie kilka razy. Chcę tylko dodać moje dwa centy. Dla tych, którzy nie lubią używać ORM i zamiast tego piszą własne klasy DAL, gdy masz 20 kolumn w tabeli i 40 różnych tabel z odpowiednimi operacjami CRUD, jest to bolesne i strata czasu. Powtórzyłem powyższy kod do generowania metod CRUD na podstawie encji i właściwości tabeli.
Oczywiście nie jest to kod kuloodporny i można go ulepszyć. Chciałem tylko przyczynić się do tego doskonałego rozwiązania
źródło
nieznacznie zmodyfikowany od górnej odpowiedzi:
co powoduje, że dane wyjściowe są potrzebne do pełnego LINQ w deklaracji C #
źródło
Najprostszym sposobem jest EF, Reverse Engineer. http://msdn.microsoft.com/en-US/data/jj593170
źródło
Lubię organizować zajęcia z lokalnymi członkami prywatnymi oraz publicznymi podmiotami przystępującymi / mutującymi. Więc zmodyfikowałem powyższy skrypt Alexa, aby zrobić to również dla każdego, kto jest zainteresowany.
źródło
Mały dodatek do wcześniejszych rozwiązań:
object_id(@TableName)
działa tylko, jeśli jesteś w domyślnym schemacie.działa w dowolnym schemacie pod warunkiem, że @tableName jest unikalny.
źródło
W przypadku, gdy jest to przydatne dla kogokolwiek innego, pracując nad podejściem Code-First przy użyciu mapowania atrybutów, chciałem czegoś, co po prostu sprawiło, że musiałem powiązać jednostkę w modelu obiektowym. Dzięki odpowiedzi Carnotaurusa rozszerzyłem ją zgodnie z ich sugestiami i wprowadziłem kilka drobnych poprawek.
Opiera się zatem na tym rozwiązaniu składającym się z DWÓCH części, z których obie są funkcjami skalowalnymi SQL:
Użycie z MS SQL Management Studio:
spowoduje wartość kolumny, którą możesz skopiować i wkleić do Visual Studio.
Jeśli to pomoże komukolwiek, to świetnie!
źródło
Spakowałem tutaj pomysły z kilku odpowiedzi opartych na SQL, głównie z odpowiedzi roota Alexa Azy, do klassify , aplikacji konsolowej, która generuje wszystkie klasy dla określonej bazy danych jednocześnie:
Na przykład, biorąc pod uwagę tabelę,
Users
która wygląda następująco:klassify
wygeneruje plik o nazwieUsers.cs
wyglądającej tak:Wyświetli jeden plik dla każdej tabeli. Odrzuć to, czego nie używasz.
Stosowanie
źródło
Pomyślałem, że dodam własną odmianę najlepszej odpowiedzi dla każdego, kto jest zainteresowany. Główne cechy to:
Dodaje atrybuty System.Data.Linq.Mapping do klasy i każdej właściwości. Przydatny dla każdego, kto używa Linq do SQL.
źródło
Właśnie tak zrobiłeś, o ile twoja tabela zawiera dwie kolumny i nazywa się coś w rodzaju „tblPeople”.
Zawsze możesz pisać własne opakowania SQL. Właściwie wolę to robić w ten sposób, NIENAWIDZĘ generować kod w jakikolwiek sposób.
Być może utwórz
DAL
klasę i wywołaj metodęGetPerson(int id)
, która zapyta bazę danych dla tej osoby, a następnie utworzyPerson
obiekt na podstawie zestawu wyników.źródło