Which is the “best” data access framework/approach for C# and .NET?

后端 未结 4 1041
野趣味
野趣味 2021-01-30 07:06

(EDIT: I made it a community wiki as it is more suited to a collaborative format.)

There are a plethora of ways to access SQL Server and other databases from .NET. All h

4条回答
  •  无人及你
    2021-01-30 07:46

    Added for new technologies:

    With Microsoft Sql Server out for Linux in Beta right now, I think it's ok to not be database agnostic. The .Net Core Path and MS-SQL route allows you to run on Linux servers like Ubuntu entirely with no windows dependencies.

    As such, imo, a very good flow is to not use a full ORM framework or data controls and leverage the power of SSDT Visual Studio Projects (Sql Server Data Tools) and a Micro ORM.

    In Visual Studio you can create a Sql Server Project as a legit Visual Studio Project. Doing so allows you to create the entire database via table designers or raw query editing right inside visual studio.

    Secondly, you get SSDT's Schema Compare tool which you can use to compare your database project to a live database in Microsoft Sql Server and update it. You can sync your Visual Studio Project with the server causing updates in your project to go out to the server. Or you can sync the server with your project causing your source code to update. Via this route you can easily pick up changes the DBA made in maintenance last night and push out your new development changes for a new feature easily with a simple tool.

    Using that same tool you can compute the migration script without actually running it, if you need to pass that off to an operations department and submit a change order, it works for that flow to.

    Now for writing code against you MS-SQL Database, I recommend PetaPoco.

    Because PetaPoco works Perfectly inline with the above SSDT solution. PetaPoco comes with T4 text templates you can use to generate all your data entity classes, and it generates the bulk data layer classes for you.

    The catch is, you have to write queries yourself, which isn't a bad thing.

    So you end up with something like this:

    var people = dbContext.Fetch("SELECT * FROM People where Username Like '%@0%'", "bob");
    

    PetaPoco automatically handles parameterizing @0 for you, it also has the handy Sql class for building queries.

    Furthermore, PetaPoco is an order of magnitude faster than EF6 and 8+ times faster than EF7.

    So in total, this solution involves using SSDT for SCHEMA management, and PetaPoco for code integration at the gain of high maintainability, customization, and very good performance.

    The only downfall to this approach, is that you're hard tieing yourself to Microsoft Sql Server. However, imo, Microsoft Sql Server is one of the best RDBM's out there.

    It's got DBMail, Jobs, CLR object capabilities, and on and on. Plus the integration between Visual Studio and MS-SQL server is phenomenal and you don't get any of that if you choose a different RDBMS.

提交回复
热议问题