This project is read-only.

Roadmap to support Oracle

Mar 24, 2009 at 5:59 AM
Hi,

I happened to find your project and it seems very interesting.
I know you are working on ASP.Net MVC.
Would you plan to add Oracle linq support in future?

Thanks
Wicky



Mar 24, 2009 at 3:59 PM
Definitly we would like to add Oracle support in some future, or, at least, make it some extensibility points to simplify using other databases.

The main problema currently is implementing SelectMany without Cross Apply / Outer Apply, that are SQLS -Only

At any rate, it won't work with legacy databases, since we are focuses in an entities-first only approach.

If you looking to use Linq agains a legacy oracle schema maybe LLBLGen is a better solution.

Thanks for your interest
Mar 26, 2009 at 4:31 AM
Hi, Olmo,

Does your product support connect to multiple databases in Web application, and different user/thread, at the same time?
I ask this because when I came across ConnectionScope, I found it used a static Stack internally.
Will it be any problem for my case?

Thanks
Wicky
Mar 26, 2009 at 12:37 PM
Edited Mar 26, 2009 at 3:14 PM

Don't worry about the field:

[ThreadStatic]
private static Stack<BaseConnection> stack;

the ThreadStatic attribute is what makes each Thread (and ASP.Net request)  have a different stack of Connections, so there's no potential concurrency problems using this data structure.

http://msdn.microsoft.com/en-us/library/system.threadstaticattribute(vs.71).aspx

In order tu support multiple databases you have to specify, on a region of code, that you want to switch to another database:

//connected to Default database

Database.Retrieve<BarDN >(3);

using
(new ConnectionScope(GlobalResources.AlternativeDatabase))
{
  //connected to AlternativeDatabase 
  Database.Retrieve<FooDN>(23);
}

You can find more info here:
http://www.signumframework.com/Connection.ashx

 

 

Mar 26, 2009 at 2:41 PM
Hi, Olmo,

Thanks for the explanation.
I only find online help on your web site.
Do you have CHM format help?

Regards
Wicky
Mar 26, 2009 at 3:18 PM
Edited Mar 26, 2009 at 3:19 PM
Hi, wicky

Nope. The framework stills in strong development and we think a wiki is the most agile approach to write the documentation.

We have considered compiling it to a CHM but not sure it there's an easy way to do it. Some idea?

We would like to add XML comments to the source code also.


Mar 27, 2009 at 1:30 AM
Hi, Olmo,

I have no idea about wiki to CHM.
It's ok. I'll study your online materials.
How about the progress of MVC project?
I'm keen to see your ASP.Net project and support Oracle in near future.

Regards
Wicky
Mar 28, 2009 at 6:39 PM
Signum.Web is progressing fine, maybe it's about 50% allready, but we want to test it in some of our applications before launching it.

Remember than nothing stops you from use Signum Framework in Asp.Net, Asp.Net MVC, WinForms, or whatever UI technology you use. In fact it would be quite easy because the entities implement the two interfaces that are necessary to bind to any UI (INotifyPropertyChanged and IDataErrorInfo).

Signum.Windows, however, has a better programming experience than plain WPF, and simplifies composability. We want to do the same with Signum.Web for ASP.Net MVC. 

What are you planing to build? and why are you so interested in an Oracle database?

I can see it as a big requirement if you have a legacy database, but if you are planing to build a new database, what stops you from using SQL Server instead?   

Cheers,
Olmo

Mar 29, 2009 at 8:45 AM
Hi, Olmo,

I'm thinking and building "next generation" application framework for my company, which might be based on ASP.Net MVC, one OR/M product and others.
Signum Framework seems quite suitable for us, on .Net 3.5 and full linq support, and open source.
But my company invests on both Oracle and SQL server, so I need to support both of them.

Regards
Wicky
Mar 29, 2009 at 4:11 PM
If what you are planning to build is an application framework, so some applications go in SQL Server, and others on Oracle, then it could make sense.

I've been looking at what Oracle support will actually mean. There are no factories and stuff because out last framework was... 'pretending' to be db independant but at the end it was just more complex and we never used anything different, we wanted to simplify this one on this. Anyway, arquitecturaly it wouldn't be so hard to do so:

- Rename Connection to be SqlServerConnection (in ordert to avoid crashing with SqlConneciton), and create a new OracleConnection
- Make SqlBuilder an instance class (is an static class), created by Connection class, so it can be overriden.
- Create a version of SqlDbTypeAttribute for oracle, and use it in the SchemaBuilder
- Make Transaction.RealTransaction delegate on Connection to create a Transaction, so it can be overriden

The real problem is two or three implicit dependencies that would be very hard to change:

- The whole Linq Provider will need to be re-tested. A solution for SelectMany will be necessary.
- Possibly many schema manipulation commands are Sql Server only.
- On inserts, OUTPUT option is used to get the ID. Not sure if Oracle works this way.

If you are in a hurry to get Oracle support, possibly the best option is to do it yourself. Oracle support is in our list of 'nice to have' features, but we still having many in 'must have' :)

Cheers
Mar 30, 2009 at 2:56 AM
Hi, Olmo,

It's not so urgent indeed. I still have time to prepare it :).

For the SqlConnection/SqlParameter/SqlTransaction ... ,
I suggest to change to use DbConnection/DbParameter/DbTransaction ..., 
which should be supported by Oracle provider (and other native .net 2.0 provider I think).

SqlBuilder need to be an instance, may be we can put common things in a BaseSqlBuilder.

I agree that the Linq part would be the most difficult one.

I'm studying your source and I would like to contribute if possible.

Regards
Wicky
Mar 31, 2009 at 4:27 PM
Hi again :)

Sure, we will need to use DbConnection instead, but theres not a lot of places where the SqlCommand os SqlConnection is exposed (Executor only). Sql parameter is a bit more extended in the SqlPreCommand.

If you need any help/advise in your modifications just tell me.
 
Cheers,
Olmo.