Databaskoppling i C# industristandard

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008

Databaskoppling i C# industristandard

Hej! Om man ska skapa databaskoppling i C# finns väl ADO.NET¨.

Är detta "standard" för databaskoppling fortfarande?

Sedan om man ska spara Objekt finns väl Entity Framework och LINQ.

Ingår dessa i ADO.NET?

Har alltså en aning om hur och när dessa används men inte helt.

Vet att det är en bred fråga men skulle uppskatta lite råd.

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Registrerad
Nov 2016

Det rekommenderade sättet är att använda Entity Framework och Linq.

Självklart kan du fortfarande använda ADO.NET men du kommer spendera massor av tid på att skriva kod som bara hanterar databas specifika grejer när du lika gärna kan låta EF sköta det och jobba med de modeller du har i din applikation istället.

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008
Skrivet av kyuw:

Det rekommenderade sättet är att använda Entity Framework och Linq.

Självklart kan du fortfarande använda ADO.NET men du kommer spendera massor av tid på att skriva kod som bara hanterar databas specifika grejer när du lika gärna kan låta EF sköta det och jobba med de modeller du har i din applikation istället.

Fast om jag förstått saken rätt så skapar EF tabellerna till dig.

Det innebär mindre kontroll och man har ingen nytta av att kunna SQL?

Hur är det med LINQ (LINQ är väl ganska brett men sedan finns det väl LINQ to SQL)?

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2007
Skrivet av Larsp777:

Fast om jag förstått saken rätt så skapar EF tabellerna till dig.

Det innebär mindre kontroll och man har ingen nytta av att kunna SQL?

Inte nödvändigtvis. EF kan gå från båda hållen, både tabell först och modell först.

Där jag jobbar kör vi nHibernate, även om jag personligen föredrar EF.

WS: Bärbar workstation, 2 * Dell U2412M
HTPC: Intel NUC, Canton GLE 496, Yamaha RV-A830, Sanyo PLV-Z700
Server: Intel Xeon E3-1240@3.4 GHz, ESXi, 32GB RAM, 8*2TB RAID-Z2 + SSD-cache
Slösurf: MacBook Air 11,6", Samsung S8
Kamera: Canon EOS 5DII + 1DIII, Canon 100/2.8 Macro, Canon 70-200/2.8L, Canon 24-70/2.8L

Trädvy Permalänk
Medlem
Plats
Västra Frölunda
Registrerad
Maj 2004

"Entity Framework is Microsoft’s recommended data access technology for new applications"
- Introduction to Entity Framework @ MSDN

På min arbetsplats körde vi LINQ to SQL tidigare, men det är utbytt till Dapper på de flesta ställen. Dapper mappar bara om datan från SQL-servern till .NET-objekt och skapar ju inte upp frågorna mot databasen själv. Det gör ju att man kan finlira lite (på gott och ont) med hur frågan som skickas till databasen ser ut.

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008
Skrivet av zyberzero:

Inte nödvändigtvis. EF kan gå från båda hållen, både tabell först och modell först.

Där jag jobbar kör vi nHibernate, även om jag personligen föredrar EF.

Skrivet av jovnas:

"Entity Framework is Microsoft’s recommended data access technology for new applications"
- Introduction to Entity Framework @ MSDN

På min arbetsplats körde vi LINQ to SQL tidigare, men det är utbytt till Dapper på de flesta ställen. Dapper mappar bara om datan från SQL-servern till .NET-objekt och skapar ju inte upp frågorna mot databasen själv. Det gör ju att man kan finlira lite (på gott och ont) med hur frågan som skickas till databasen ser ut.

Aha, tack!

Så använder man fortfarande SQL?

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Jan 2011

Det är bra att kunna lite SQL när något ska finliras, men jag tror att i majoriteten av fallen kör vi EF code first och gör ingenting i ren SQL.

Det innebär inte att man har mindre kontroll. Det är bara ett annat sätt att jobba på.

He who hasn't hacked assembly language as a youth has no heart. He who does so as an adult has no brain.
~John Moore

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2007
Skrivet av Larsp777:

Aha, tack!

Så använder man fortfarande SQL?

Absolut, kanske inte direkt ifrån backendkoden men vid profilering är det nödvändigt att förstå hur det fungerar, du får ju frågan som EF/nHibernate/vilken ORM man nu använder ställer till DB:n. Den vill man kanske försöka optimera indexeringen för, och har man ingen aning om hur databaser och SQL fungerar så blir det lurigt.

Jag använder ofta SQL för att söka ur statistik ur databasen, hade jag inte kunnat SQL hade det blivit lurigt. Vad beror din frågeställning på?

WS: Bärbar workstation, 2 * Dell U2412M
HTPC: Intel NUC, Canton GLE 496, Yamaha RV-A830, Sanyo PLV-Z700
Server: Intel Xeon E3-1240@3.4 GHz, ESXi, 32GB RAM, 8*2TB RAID-Z2 + SSD-cache
Slösurf: MacBook Air 11,6", Samsung S8
Kamera: Canon EOS 5DII + 1DIII, Canon 100/2.8 Macro, Canon 70-200/2.8L, Canon 24-70/2.8L

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008
Skrivet av zyberzero:

Absolut, kanske inte direkt ifrån backendkoden men vid profilering är det nödvändigt att förstå hur det fungerar, du får ju frågan som EF/nHibernate/vilken ORM man nu använder ställer till DB:n. Den vill man kanske försöka optimera indexeringen för, och har man ingen aning om hur databaser och SQL fungerar så blir det lurigt.

Jag använder ofta SQL för att söka ur statistik ur databasen, hade jag inte kunnat SQL hade det blivit lurigt. Vad beror din frågeställning på?

Jag är håller en kurs i SQL och databaser och det var ett tag sedan jag jobbade som programmerare.

Nu tänkte jag att man kunde visa hur man kopplar från C# till SQL Server.

ADO känner jag till men började fundera på vilka modernare sätt som finns.

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10

Trädvy Permalänk
Medlem
Plats
Västra Frölunda
Registrerad
Maj 2004

Om man kommer från SQL-hållet så är den spontana tanken att man kanske kunde börja med Dapper för att enkelt visa hur man hämtar objekt från databasen.
Den här funktionaliteten finns garanterat i EF också, jag minns bara inte hur man gör där.

Ex:

public class User { public int Id { get; set; } public string Name { get; set; } public int ShoeSize { get; set; } } public User GetUser(int id) { const string sql = "SELECT Id, Name, ShoeSize FROM Users WHERE Id = @id"; using (var conn = new SqlConnection(connectionString) { return conn.QueryFirstOrDefault<User>(sql, new { id }); } }

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2007

@Larsp777: Ah! Skoj! Vad är det för målgrupp du har?

Du skulle kunna sätta upp ett litet exempel med EF/nHibernate och visa den faktiska frågan som ställs. På så vis ser man att man faktiskt inte klarar sig utan SQL?

Annars exemplet som @jovnas ger är ju betydligt närmre SQL, men jag har svårt att tro att det är vanligt att faktiskt knacka rå SQL om det inte är för att krama ut sista droppen med prestanda.

WS: Bärbar workstation, 2 * Dell U2412M
HTPC: Intel NUC, Canton GLE 496, Yamaha RV-A830, Sanyo PLV-Z700
Server: Intel Xeon E3-1240@3.4 GHz, ESXi, 32GB RAM, 8*2TB RAID-Z2 + SSD-cache
Slösurf: MacBook Air 11,6", Samsung S8
Kamera: Canon EOS 5DII + 1DIII, Canon 100/2.8 Macro, Canon 70-200/2.8L, Canon 24-70/2.8L

Trädvy Permalänk
Medlem
Registrerad
Nov 2016

Inte helt lätt med ett enkelt EF exempel eftersom det kräver lite fler steg men det hela är ganska enkelt:

1. Gör dina modeller
2. Gör en klass som ärver DbContext
3. Ha egenskaper i denna klass av typen DbSet<DinModell>

Sedan är det bara köra med linq på de egenskaperna. Om jag lånar @jovnas exempel

Modellen är User:

public class User { public int Id { get; set; } public string Name { get; set; } public int ShoeSize { get; set; } }

Din context klass:

public class MyDbContext : DbContext { public MyDbContext() : base("ConnectionStringName") { } public DbSet<User> Users { get; set; } }

Användes som till exempel:

using(var db = new MyDbContext()) { var hugeFeets = db.Users.Where(u => u.ShoeSize >= 48); }

Databasen kan vara existerade eller skapas automatiskt eller med migrations.

Som du ser är det ganska enkelt i grunden.

Trädvy Permalänk
Medlem
Plats
Hässleholm
Registrerad
Jan 2008

Tack för alla svar!

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Acer Predator XB271HU || Windows 10