Don't forget those that have to have C# support in text editors now there are plugins for Brackets, Atom, Sublime, vim and Emacs via http://omnisharp.net
Unless of course they push to make VS cross platform. I wouldn't be surprised if this is in the works. There has been a huge push at MS to become more cross platform with their product offerings. They must know a lot of their developers run OSX with a Windows VM just to run VS. I know pretty much our entire team does that.
As someone who has worked with Visual Studio and integration APIs for a long time, a port of VS across platforms would be a huge undertaking. A rewrite, essentially.
Visual Studio is heavily tied to WPF (Windows-only) presentation framework, COM (Windows-only) for communication across components and plugins, as well as bits of native legacy code throughout (Windows-only.)
Truly, you're looking at rewriting Visual Studio to get it on OSX. Heck, MS would probably be better off just buying Scrawl and rebranding it as Visual Studio for Mac.
And remember: while .NET is going cross-platform, there are no public plans for a cross-platform UI toolkit; there is no cross platform WinForms or WPF from Microsoft.
If Microsoft made VS cross platform, they would make a much more lightweight, modular IDE aimed at (initially) C#,VB,F# and javascript. They'd be able to leave out decades of that old COM/Win32/C++ cruft.
Essentially, this is what they would make. Or, they could simply buy this...
Why do i need to care? Today the only cross platform thing I worry about is if my site works correctly in IE/Firefox/Chrome/Safari. I don't care about my tools, I use windows, in the past I've used windows in a virtual machine on OSX. I'm not worried about it as a web developer.
Thanks for your comment! Did I have a choice about what ORM I used? No
I agree about your approach regarding a service in a larger app but in a smaller app I have come to the conclusion today that IDBContext injected into a controller would be better than a repo, as you say you arent going to change ORMs in reality and it exposes the native functionality of your ORM.
There's going to be a lot of refactoring either way, whether there are custom abstraction layers in place, and whether there aren't.
The abstraction layers that were originally intended to ease a transition between ORMs or DBs often end up making such a transition far more difficult. They just end up being another huge amount of code that needs some type of refactoring.
IDbSet<T> is enough.
If you swap your ORM, you're swapping mindset more than just methods, unless you're mapping ORM entities to POCOs in your repository object.