Databaskoppling i C# industristandard

Permalänk
Medlem

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.

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem

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.

Permalänk
Medlem
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)?

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
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.

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Medlem

"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.

Visa signatur

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

Permalänk
Medlem
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?

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem

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å.

Visa signatur

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

Permalänk
Medlem
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å?

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Medlem
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.

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem

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 }); } }

Visa signatur

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

Permalänk
Medlem

@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.

Visa signatur

Jag är en optimist; det är aldrig så dåligt så att det inte kan bli sämre.

Permalänk
Medlem

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.

Permalänk
Medlem

Tack för alla svar!

Visa signatur

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 || Skärm:Samsung Odyssey G9 || Windows 10