News for hackers. Stuff that matters.
Re:Memory usage of a toy C# server and client with 500K conc... by twodave on Saturday January 26, 2019 @08:21PM (#19009794)
If you’re not happy with EF, and don’t mind writing your own SQL, give Dapper a try. I’ve used a variety of SQL ORMs in C# over the last 12 years, but they always seem to fall short for me in some way. I like to be in control and also have nice types, and Dapper is the perfect answer for that.

Yes, you do end up writing some code that a great ORM would just give you for free, but honestly I haven’t felt pain from doing this as it makes me actually think about and set in stone what relationships and models I intend to support in my data layer.

Re:Memory usage of a toy C# server and client with 500K conc... by zoeysaurusrex on Saturday January 26, 2019 @08:54PM (#19009917)
Or better yet, don’t fall for the monotoolism trap and use both! I regularly use EF for inserting lots of hierarchy using one transaction, and dapper for fast view/materialized view reads. It’s an excellent combination.
Re:Memory usage of a toy C# server and client with 500K conc... by twodave on Saturday January 26, 2019 @09:25PM (#19010032)
Sure, and then there’s of course old school ADO.NET for bulk inserts.
Re:Memory usage of a toy C# server and client with 500K conc... by tracker1 on Sunday January 27, 2019 @10:58PM (#19015248)
One of the main projects I'm working on is using JSON for a more normalized usage of stored procedures with MS-SQL `method(tokenJSON, inputJSON, out outputJSON, out outerrJSON)`, so using Straight ADO.Net for most calls and responses. I'm not a fan of DB heavy logic, but it has made the API layer super thin and works pretty well.
Re:Memory usage of a toy C# server and client with 500K conc... by nicoburns on Saturday January 26, 2019 @08:54PM (#19009919)
I find writing raw SQL to be quite annoying for simple CRUD operations. It's just so easy to make stupid little syntax mistakes when writing SQL. And things like having to update all your queries if you add a column to your database are pretty annoying too...

ORM's like Eloquent (PHP) are super nice, because they let you lean on them completely for simply queries, and then give you layers of opt-outs. For example, inserting a row is just obj->save(). For slightly tricky selects you can use the whereRaw method to interpolate raw SQL into just a where clause of the query, or you can use DB::query() to write a full raw SQL query if you have some queries that are particularly complex.

I guess I could give Dapper a go though. SQL is... fine.

Re:Memory usage of a toy C# server and client with 500K conc... by wvenable on Sunday January 27, 2019 @12:33AM (#19010477)
I think you misunderstand Entity Framework if you think it's worse than Eloquent. Eloquest is ok and certainly pretty reasonable for PHP. But EF and Linq are in another ballpark entirely -- it's extremely easy to use and even allows you to do type-safe queries.
Re:Memory usage of a toy C# server and client with 500K conc... by nicoburns on Sunday January 27, 2019 @07:09AM (#19011406)
Perhaps! I'm new to .Net and Entity Framework.

But from what I can see, EF is trying to provide an abstraction layer that pretends that I am just working with collections of objects, which I don't like at all because it makes it harder to control which queries actually get executed and when!

On the other hand, Eloquent provides an abstraction for generating queries, but this maps pretty closely to SQL, and it otherwise largely stays out of the way...

The type safety is nice, and of course you don't get that in PHP. But IMO that's more about the language than the library.

Re:Memory usage of a toy C# server and client with 500K conc... by wvenable on Sunday January 27, 2019 @12:34PM (#19012713)
EF will only query exactly what you ask for and will execute the query only at the point you actually iterate or request an object. For changes, EF will only hit the database when you call SaveChanges() on the context. It's an abstraction that works with very few "leaks".

Eloquent also has object collections. Both frameworks have similar methods for filtering and querying. Eloquent is much more clunky (because PHP) and the underlying conceptual model is different (ActiveRecord style vs. DataMapper style). I certainly would use Eloquent for PHP projects but I definitely wish PHP could do something like EF.

Re:Memory usage of a toy C# server and client with 500K conc... by noir_lord on Sunday January 27, 2019 @01:05PM (#19012855)
Doctrine is closer (in terms of actually been a Data Mapper) than Eloquent so it may be more up your alley.
Re:Memory usage of a toy C# server and client with 500K conc... by twodave on Saturday January 26, 2019 @09:23PM (#19010031)
I mean, I get writing boilerplate SQL can be annoying, but honestly if you organize your code well then you end up making changes only in a few places (your repository class and wherever the new column actually gets used). By encapsulating your database in a set of repository classes you can avoid most headaches. Even if you don’t write your own SQL for most things, this is a really valuable pattern to follow in data-centric code of any kind.
Re:Memory usage of a toy C# server and client with 500K conc... by highace on Sunday January 27, 2019 @08:32AM (#19011605)
Look at Dapper.Contrib - it's an extension lib for Dapper that adds a load of ORM-esque functions for basic CRUDing.
Re:Memory usage of a toy C# server and client with 500K conc... by animal531 on Monday January 28, 2019 @08:47AM (#19017354)
Yeah, also Dapper.Extensions/Mapper/SimpleCRUD etc.

There are a lot of add-ons for it that simplifies all the generics for you.

Re:Memory usage of a toy C# server and client with 500K conc... by naasking on Sunday January 27, 2019 @09:24AM (#19011780)
> I find writing raw SQL to be quite annoying for simple CRUD operations. It's just so easy to make stupid little syntax mistakes when writing SQL.

There are ways to mitigate this [1]. You write your queries in .sql files in Visual Studio, so you get intellisense and syntax highlighting, and you can even add these to your automated test suite to ensure they run correctly.

[1] https://github.com/naasking/Dapper.Compose

Re:Memory usage of a toy C# server and client with 500K conc... by platz on Sunday January 27, 2019 @12:30PM (#19012684)
what is the benefit of "composing" queries via this library instead of just running them separately in a single connection? The "composed" queries are completely opaque to each other and are independent - they are not "composed", just "batched".
Re:Memory usage of a toy C# server and client with 500K conc... by naasking on Sunday January 27, 2019 @03:02PM (#19013493)
> what is the benefit of "composing" queries via this library instead of just running them separately in a single connection?

I think the link is pretty clear: it combines and batches queries while providing a type-safe interface for the returned results. It further provides intellisense and unit testing features that are tedious and error-prone to achieve in other ways.

Of course you can do this all by hand, or manually batch your queries to avoid round trips, but why would you want to?

Re:Memory usage of a toy C# server and client with 500K conc... by pjmlp on Sunday January 27, 2019 @04:14AM (#19011019)
Dapper is quite good middle ground.

The flexibility and performance of full SQL, without having to write all the mapping boilerplate by hand.