11

Long time lurker, first time poster. I'm a self-taught hacker that learned Ruby on Rails to start. At work I've been allowed to work on a web app--the only catch is I have to use ASP.NET. This technology choice is mandated, as much as I'd prefer to use Rails.

There's dozens of "Rails for .NET/PHP/Java Developers" books and blog posts but I haven't found any going the opposite direction, from Rails to .NET.

Could someone please give me an overview of how a typical Rails app would translate over to ASP.NET MVC? I'll research the details of the IDE, C#/VBscript, etc. But what are the possible equivalents to:

  • Generators
  • Gems/Plugins
  • Databases
  • Migrations
  • Routes
  • Models (ORMs)
  • Controllers (InheritedResources)
  • Views (layouts, templates, partials)
  • Rails Console
  • Test Units/Specs
  • etc. anything else I'm forgetting

I assume a lot of the Rails niceties I take for granted like route-based helper methods, and simple macro association declarations will not be possible. :(

Thank you so much!

4 Answers4

8

I think what you'll find in the .Net world is that you have a lot of choices to make. Rails is nice because it provides all of that stuff in one place, but developing for .Net you'll have to piece together a solution of your own.

  • Generators - There are various code generation facilities, but each one is for a different piece. Eg, you can get MyGeneration that will generate code based on a database.
  • Gems/Plugins - No uniting system for this; Components can be found on the web and you would download either the source or the .dll, then you would add a reference in your project to the assembly (.dll).
  • Databases - you can connect to pretty much anything; You'll probably find the most guidance for an MS SQL Server.
  • Migrations - I don't know of a direct method for this in the .net world; I usually write SQL code in SQL and run scripts on the server manually as part of deployment.
  • Routes - ASP.Net MVC includes routes, look in the global.asax.cs file that gets generated when you create a project for example.
  • Models (ORMs) - ORMs for .Net are all over the place. Included as part of .Net are things like Linq-to-sql and the Entity Framework. Outside of MS you can find many, but I'd probably recommend NHibernate.
  • Controllers - Built in to .Net MVC; You get to write the code.
  • Views - Built in to .Net MVC; Once again you get to write them. MasterPages allow you to get the same general layout on all your pages(including common header/footer, etc), Web Controls (.ascx files) allow you to do a partial view.
  • Rails Console - I don't know exactly what this provides (I'm a .net developer interested in learning Rails, but haven't spent much time yet); Visual Studio lets you debug applications, step through code, etc. I don't think there are any consoles available to test code outside of just writing the code, compiling, and running it.
  • Test Units/Specs - There are a few test frameworks for .Net (MS has a framework included, NUnit is one alternative). For specs and such, probably google around for Behavior Driven Design and see what exists.
Chris Shaffer
  • 32,199
  • 5
  • 49
  • 61
  • Thanks, Chris, this is helpful. RE: Rails Console--it's cool.This might be an affordance of a dynamic interpreted scripting language. This is a good example: http://railscasts.com/episodes/48-console-tricks – ASP.NET MVC for Rails devs Feb 17 '10 at 19:58
  • @Chris Shaffer "Consoles to test code." <-- That's what Unit Testing frameworks like MSUnit and NUnit are for. – George Stocker Feb 17 '10 at 20:26
  • @ASP.NET - thanks for the link, looks very useful. Visual Studio provides some of the information available in the Rails console (eg, Intellisense will pop up for autocompletion, you can navigate to classes and such to see what is available, etc. Unfortunately you can't actually interact with your code the same way. While debugging, you can set a breakpoint and then interact in the Immediate console of VS, however there are definite limits to what you can accomplish here. – Chris Shaffer Feb 17 '10 at 20:47
  • @George - George, based on my understanding, Ruby's reflection and introspection allow for irb/Rails Console to be used in an informal debugging fashion: http://proquest.safaribooksonline.com/9780596157487/I_sect16_d1e7506 It's hard to explain, especially since all I know is Ruby, but it's very handy. – ASP.NET MVC for Rails devs Feb 17 '10 at 21:17
  • Maybe you and @ASP.NET can switch jobs. Sounds like a win-win. :) – bzlm Feb 18 '10 at 08:04
  • @ChrisShaffer LINQPad is your equiv to Rails Console. See answer below. – Lloyd Feb 23 '12 at 09:30
5

There are a couple of .NET ports of RoR migrations. I have used migratordotnet and FluentMigrator. Both work as expected but I prefer FluentMigrator. It is more full-featured (e.g. can create indexes) and I like the fluent style.

Daniel Lee
  • 7,709
  • 2
  • 48
  • 57
  • 1
    Strange that I got a downvote for this. Anyone care to explain? Fluentmigrator is the way to go if you want Ruby-style database migrations. – Daniel Lee Feb 03 '11 at 13:41
2

LINQPad is your equivalent to Rails Console.. see here: https://stackoverflow.com/a/9403457/1029644

Community
  • 1
  • 1
Lloyd
  • 8,204
  • 2
  • 38
  • 53
0

You should download Visual Studio 2008 Express, and download ASP.NET MVC 1.0 (I wouldn't download ASP.NET MVC 2.0 yet because it's only in RC. Wait until it hits 2.0 final).

You can also check out the Nerddinner walkthrough. It's very helpful when learning ASP.NET MVC.

  • Generators

Do you mean code generators? Ew.

  • Gems/Plugins

If you want functionality, you can either build it or see if a JQuery plugin exists for it.

  • Databases

The Database is accessed through your model.

  • Migrations

?

  • Routes

Routing is handled by the framework, and you can add routes in the Global.asax.cs file.

  • Models (ORMs)

Models are indeed still called 'Models', and in ASP.NET MVC, if you use LINQ-To-SQL, the model is generated for you when you drag your database tables in. You can use the Repository pattern to access the database model.

  • Controllers (InheritedResources)

Controllers are still called controllers.

  • Views (layouts, templates, partials)

There are different types of View Engines, but the one provided with ASP.NET MVC should do well at first.

  • Rails Console

I'm guessing you mean the IDE/Debugger? You can build and debug an ASP.NET MVC app inside of Visual Studio.

  • Test Units/Specs

You can use NUnit, or you can use MSUnit. MSUnit is already integrated with Visual Studio, but NUnit can be.

George Stocker
  • 57,289
  • 29
  • 176
  • 237
  • 1
    @George I disagree about ASP.NET MVC 1.0 vs 2.0. ASP.NET 2.0 is much more mature than 1.0, and includes features that someone coming from a Rails background would find an improvement to not have to re-invent, such as Areas and Validation. ASP.NET MVC 2.0 has the Go-Live License, which makes it a very safe bet. – bzlm Feb 18 '10 at 08:06
  • @bzlm, Ok; but MVC 2 does have bugs that will make you go crazy. I dealt with one the other night. http://aspnet.codeplex.com/WorkItem/List.aspx – George Stocker Feb 18 '10 at 11:31
  • Which bug was that? Since nobody uses issue voting on Codeplex, and many issues are really non-issues, it's hard to tell from just looking at the list. – bzlm Feb 18 '10 at 11:44
  • It was an issue with Model Binding setting `null` to values that weren't in the collection when calling UpdateModel. http://stackoverflow.com/questions/1936970/asp-net-mvc-2-problem-with-updatemodel – George Stocker Feb 18 '10 at 13:46
  • @GeorgeStocker LINQPad is your equiv to Rails Console. See answer below. – Lloyd Feb 23 '12 at 09:30