ORM that supports Mono? - c#

I'm starting up a rather large-scale open source server project written in C# which targets both the MS.NET and Mono platforms. However, I realized that Mono only has limited support for LINQ to SQL, and no support for the Entity Framework at all.
Two ORMs I have considered are NHibernate and SubSonic. However, I have no idea how either will operate on Mono 2.8 (which is what I'm targeting).
So, can anyone recommend an ORM that will run on Mono 2.8, or happen to have used some of the aforementioned ORMs successfully under Mono?
Thanks in advance.

Mono supports:
NHibernate - Free, open source, proven and tested. Easy to configure. My personal favorite.
db4o - Free if you open-source your own project. You have to license it for commercial apps. Much less well-known than NHibernate.
siaqodb - Available for Mono 2.4 and up. You have to pay $185 for a license, but the redistributable engine is royalty-free.
In choosing from this list, I'd suggest NHibernate. Lots of help is available out there for it and it works fabulously.

Another very interesting one I have come across recently is Vici CoolStorage. It even supports Mono (MonoTouch specifically) on the iPhone.

You sure NHibernate doesn't work on Mono? You should be able to use the same Assemblies at Mono. Another option is to download it's source and compiling it. Check this page https://forum.hibernate.org/viewtopic.php?f=25&t=951909&start=0

Related

Does dotConnect for SQLite support Mono?

Does the dotConnect provider for SQLite from Devart support Mono? Google seems to say it does, but their own compatibility page says it does not.
I'm looking to use Code First on Mono with SQLite.
If its own page says it does not, there must be some pieces missing. But you can always have a test on your own. Maybe your application happens to use only the compatible part of it.
This applies to many existing products, such as Microsoft Unity. They are all reported by MoMA as not fully compatible with Mono/Linux, but you can still use them on Mono in some cases.

Linq to SQL Templates in .NET 2.0 Projects

I can't find a template for a linq to sql class in .net 2.0 project, based on what i know you can work with linq in .NET 2.0 as long as you have 3.5 in your development machine and ship system.core.dll with your application?
so based on that how can I add a Linq to Sql model to my project when "Linq to Sql Classes" template is missing from the add new item window?
Edit:
Just to clear things up, This is a server application and the server will have .net 3.5 SP1. the only issues is that we can not upgrade the project to .net 3.5 at the moment.
If you ship System.Core with your application, it won't pick up future security fixes and won't have the optimized build installed (MS internally uses and profiling NGEN for distributed framework libraries). Either require .NET 3.5, avoid using Linq, or implement your own extensions for a custom Linq provider.
The approach you are taking is dangerous and will almost certainly lead to errors on your deployment machine.
The 3.5 framework, and specifically System.Core.dll, rely on the CLR being at least 2.0 SP1. There are several bugs in CLR 2.0 that are exposed by the use of the expression tree API and other code which Linq2Sql relies upon.
If you ship System.Core.dll only the clients are not guaranteed to have, and likely won't have, the CLR service pack. Hitting any of these bugs will result in hard to understand failures in your application.
You may get lucky for awhile but this is an untested and unsupported scenario.
I highly advise you to not do this
Try adding a reference to System.Core
http://iformattable.blogspot.com/2008/05/using-linq-from-net-20.html
I figured it out, All you have to do is add a new text file to the project, but change the extension from .txt to .dbml and it'll automatically be picked up by visual studio. it will even generate all the code behind for you.

Can c# compiled app run on machine where .net is not installed?

I want to develop a small utility for windows and I prefer doing that in c# because it is easier (I'm a java developer).
The utility will be available for download by many people and I assume some of them will not have the .net framework installed (is this assumption correct, say I target win xp and above?)
My question is: can a c# application be compiled in a way that it will not require the .net framework installed?
Normally, you will need the .NET Framework being installed on the target system. There is no simple way around that.
However, certain third-party tools such as Xenocode or Salamander allow you to create stand-alone applications. See this related question:
Is there some way to compile a .NET application to native code?
As these solutions are not straight-forward and require commercial products I would recommend you to create a simple Visual Studio Setup and Deployment project. In the properties of the project you should include the .NET Framework as a pre-requisite. The setup.exe created will then automatically download and install the .NET Framework prior to installing your application.
No, it will need the .Net framework installed. Note though that you will need only the redistributable version, not the SDK.
A minor aside - but in this scenario, consider developing the utility in Silverlight - it has a much smaller footprint and is supported on a number of operating systems. This might allow you to get the coverage including people who don't already have .NET.
If you need "normal" .NET, then "Client Profile" is perhaps an option.
You can probably also include the .net framework installer in your application.
In a related question, Can you compile C# without using the .Net framework?, it's mentioned you could do this using mkbundle from mono. I haven't tried it myself so I can't comment on if it's the way you should go, but you may want to consider it.

Feasibility of C# development with Mono

Recently, I came across Mono and MonoDevelop packages in Ubuntu linux. They claim to have a .NET runtime in accordance with CLI. Before installing the packages myself, I would like to know the following:
How powerful is Mono?
Can I develop GUI application for
linux like developing WinForm
applications for Windows.
Is MonoDevelop IDE compatible with Visual Studio IDE. Can I import VS 2008 solutions to MonoDevelop and work?
Does it support .NET 2.0 and above?
EDIT: Adding one more doubt
Is there any way to run the .NET exe (of a winform app) in Linux without building the cod e in linux? In fact I don't have the code for some of the small utilities I developed earlier and would like to run them in linux.
(Strange, markdown starts the enumeration with one, even though I began with 2...)
Yes, you can, but you're limited with 3rd-party components, because the internal implementation is different, and last time I checked (not very long ago), the Mono WinForms implementation made my test app look rather strange (owner-drawn list view). It is not really recommended, though Mono claims that it's now completely WinForms-2.0-compatible.
MonoDevelop is/was a SharpDevelop branch, with the latter having solution support. I don't know if MonoDevelop has. But the cool thing is, you can just develop with Visual Studio and run your compiled apps on Mono. And Mono is, by the way, also available for Windows.
Yes, it does, as far as the CLR goes. As Marc Gravell already wrote, the Windows Foundation libraries are missing, as are a few other (System.Management, for example). But things should mostly work, including ASP.NET 2.0. Mono's application portability guidelines are a good read on this.
1: pretty good, actually. Not all the full framework is there, so if you are writing code that should build on both MS .NET and mono, you need to build and test early against both platforms
4: yes - although things like WPF/WCF/WF (3.0) are missing or slimmed down
I don't know much about the development environment, since I use VSTS (on Windows) and just use a NANT script to do the build on mono...
Define "powerful".
Mono has a WinForms implementation to allow for some level of source compatibility. However, depending on your needs, you might want to use one of the Mono bindings for a Linux native framework, like Gtk# or Qyoto
Wouldn't know.
Depends on what parts of .NET you mean. C# the language seems to be pretty current, things get fuzzier the closer you get to the enterprisey features as was already mentioned.
To sum things up, if you'll be using Mono as a separate target platform, you're likely to have good results. If you want a no-code-changes-required .NET compatibility layer, less so.
Very powerful. There are no major bugs in the core implementation. It is not a science project. The deficiencies are mostly where you would expect, the newest APIs (Microsoft inherently has a first-mover advantage there).
Yes. We just finished a project where most of the GUI code was developed in WinForms on Windows. I was able to work on it using Ubuntu without major headaches. That said, this is one of the hardest parts of the API, and there are still issues. See http://mono-project.com/WinForms for details.
Don't know, as I don't use it.
Yes, though again, there may be some missing APIs in the runtime.
Note, I use Ubuntu Hardy (8.04).
Mono is mighty powerful. It has all the .Net muscle on a very strong open source skeleton.
When you say "develop GUI application for linux like developing WinForm applications for Windows" I understand that you are asking about a visual designer that will allow you to quickly create the UI. Yes, it is possible. MonoDevelop has Stetic - a built-in visual designer for Gtk#. There is also QyotoDevelop which enables QT support in MonoDevelop.
Yes, MonoDevelop natively supports VS project/solution file format. You can use the same code base to compile your app with VS in .Net on Windows and win MD in Mono on Linux.
Currently Mono supports C# 3.0 with some stuff beyond that already implemented and a lot in the pipeline.
Yes, in many cases it is possible to run a .Net compiled app in Mono, however with MonoDevelop's support for VS solutions it doesn't really matter. It takes as much as pressing F7 to rebuild the whole project, so the effort is really negligible. The best tool for checking if your application can run in Mono is MoMA.
Mono is very powerfull, sometimes even more powerfull than Microsoft's implementation. link text
Yes you can. Winforms 2.0 is supported
I believe so.
Yes it does. C# 3 is supported and just look at winforms and the asp.net implementation to see how much is supported from each of the projects. Look at http://mono-project.com
I use WinForms in mono. The 2.x releases are very good.
I develop forms in visual-studio on windows, and run them in Linux, with zero code changes. Yes, forms look a little different than on XP, but then again, an XP-themed GUI would look kind of strange in GNOME.
If you are just getting started, stick with WinForms, while you get comfortable with Mono/Linux. However at some point you might want to investigate GTK.

.NET 2.0 or 3.5?

Our clients use a vb6 version of our software.
We are upgrading them to a .NET application written in C#...
Is there less bulk using .net 2.0 than .net 3.5?
My definition of less bulk would be: Smaller size, smaller installation time, etc.
Most of them probably already have 2.0 anyway.
I only ask because I would like to take advantage of LINQ in 3.5.
For taking advantage of LINQ, you need 3.5 (unless you want to use LINQBridge with 2.0).
For a smaller installer, .Net 3.5 Sp1 has a new feature called "Client Profile".
The .NET Framework Client Profile setup contains just those assemblies and files in the .NET Framework that are typically used for client application scenarios. For example: it includes Windows Forms, WPF, and WCF. It does not include ASP.NET and those libraries and components used primarily for server scenarios. We expect this setup package to be about 26MB in size, and it can be downloaded and installed much quicker than the full .NET Framework setup package.
Is not installing .NET 3.5 just to save a few Mb really that much more important that gaining a huge increase in productivity with LINQ and other .NET 3.5 features?
Why start off behind in technology?
The .Net 3.5 runtime is ~50Mb. The 2.0 runtime is ~23Mb.
But if you control the deployment or installation, that really shouldn't be an issue. This is especially true for 'clients' vs 'customers', and the word client involves and on-going, personal relationship. If it comes to it, send them a CD. Then anything under 700Mb is all the same.
Check out LINQBridge:
http://www.albahari.com/nutshell/linqbridge.aspx
Adding LINQ support to .net 2 (.net 3.5 still uses CLR 2.0).
.NET 3.5 is .NET 2.0 + more libraries and extensions, so yes, the install is bigger. In my opinion however, it is very much worth the extra bulk because of the extra stuff it gives you.
If it's a VB6 app, you should check which Windows versions the app is currently used on, and select the .Net version accordingly. AFAIK 3.5 does not run on W2K.
If you would like to take advantage of LINQ, then go for 3.5! I find there's not more 'bulk' when using it myself, but unless you want to use LINQ, then either is fine.
Keep in mind that certain OSes (Windows 2000 Server) won't let you install .NET 3.0 or 3.5, so you may have to stick with 2.0 for that reason.
I would suggest that you go straight with visual studio 2008 and .net 3.5 sp1,
2.0 is the basis of 3.5 and you can easily start using 2.0 and then start to use 3.5 functionalities.
Furthermore 3.5 SP1 also brings tweaks to the 2.0 framework which are nice to have.
I suggest you to go directly to 3.5 because you will be less far away (in the future ... in 3-5 years) to change to other version of framework. If in 5 year .Net is at version 5, the jump will be smaller to do. So, VB6 to 3.5 is what I suggest you.
The size of the framework is not very high, less than 60 megs... not a big deal now I think.
Also note, depending were you install the .NET framework it might be irrelevant how much extra bulk there is. The .NET Framework installs are relatively small in modern terms.
As for LINQ, it will save you a lot of time and effort, and offers a quick way to get at data. However it also depends on the clients the application will be distributed out to.
I'd say at that, go with 3.5 unless there is another major roadblock on the clients for whatever reason.
As others have pointed out, the .NET 3.5 install is longer and larger than .NET 2.0. Keep in mind that .NET 3.0 and .NET 3.5 are both extensions on top of the .NET 2.0 CLR.
I would still say upgrade from VB6 directly to .NET 3.5 (actually .NET 3.5 SP1) and VS2008, as long as your client operating systems support that version of the Framework (otherwise you will need to choose the lowest common Framework version, which very well may be .NET 2.0). You will save yourself a lot of time/effort in the long run.

Categories

Resources