IZWebFileManager 2.5.3 has been released
It includes:
* Thumbnail view fix (http://www.izwebfilemanager.com/forums/thread/445.aspx)
* New Netherlands/Dutch translation (by Marcel van den Arend)
The release is available for download from Google Code
https://code.google.com/p/izwebfilemanager/
Cheers!
Saturday, March 13, 2010
Wednesday, February 10, 2010
Query the database with NHibernate 3.0
Introduction
NHibernate gives you many alternative APIs for querying database. There is HQL, which is similar to SQL, Linq to NHibernate and finally ICriteria.
And once you start to use NHibernate in your project, you have to decide which API to use. Since NH 3.0 you have one more option. It is QueryOver API.
In this post I want to compare a usage of different APIs for a simple query.
For this sample I created a console application with embedded database. Full source code is available at google code.
In my sample I have a database with one table Emploee (Id, Name, Age, Salary) and I want to calculate average salary of employees who's between 25 to 30 years old.
Lets start!
HQL
Since I was not familiar with NH (but had an experience with SQL), I found HQL is easiest way to get started with.
There is query:
Looks good, readable but not strongly typed.
Go next one.
ICriteria
The ICriteria API is NHibernate's implementation of Query Object.
Much better, but still has some "magic strings". I am looking for strongly typed code where refactoring tools like 'Find All References', and 'Refactor->Rename' will work perfectly.
Linq
NHibernate 3.0 has a built-in Linq provider.
Pretty good! Strongly typed, readable. But it uses the fact that Enumerable has Average in this case. Would we need a more complicated projection, it would be not available in LINQ. Also, LINQ syntax is still confusing for some people. It just looks different than surrounding C# code.
Keeping looking for a perfect.
QueryOver
QueryOver combines the use of Extension Methods and Lambda Expressions to provide a statically typesafe wrapper round the ICriteria API.
Perfect!
In my opinion this one is the best.
NHibernate gives you many alternative APIs for querying database. There is HQL, which is similar to SQL, Linq to NHibernate and finally ICriteria.
And once you start to use NHibernate in your project, you have to decide which API to use. Since NH 3.0 you have one more option. It is QueryOver API.
In this post I want to compare a usage of different APIs for a simple query.
For this sample I created a console application with embedded database. Full source code is available at google code.
In my sample I have a database with one table Emploee (Id, Name, Age, Salary) and I want to calculate average salary of employees who's between 25 to 30 years old.
Lets start!
HQL
Since I was not familiar with NH (but had an experience with SQL), I found HQL is easiest way to get started with.
There is query:
var salary = session.CreateQuery(
@"
select
avg(employee.Salary)
from
Employee employee
where
employee.Age >= 25 and employee.Age <=30
"
).UniqueResult<double>();
Looks good, readable but not strongly typed.
Go next one.
ICriteria
The ICriteria API is NHibernate's implementation of Query Object.
var salary = session.CreateCriteria(typeof(Employee))
.Add(Restrictions.Between("Age", 25, 30))
.SetProjection(Projections.Avg("Salary"))
.UniqueResult<double>();
Much better, but still has some "magic strings". I am looking for strongly typed code where refactoring tools like 'Find All References', and 'Refactor->Rename' will work perfectly.
Linq
NHibernate 3.0 has a built-in Linq provider.
var query = from employee in session.Query<Employee>()
where employee.Age >= 25 && employee.Age <= 30
select employee.Salary;
var salary = query.Average();
Pretty good! Strongly typed, readable. But it uses the fact that Enumerable has Average in this case. Would we need a more complicated projection, it would be not available in LINQ. Also, LINQ syntax is still confusing for some people. It just looks different than surrounding C# code.
Keeping looking for a perfect.
QueryOver
QueryOver combines the use of Extension Methods and Lambda Expressions to provide a statically typesafe wrapper round the ICriteria API.
var salary = session.QueryOver<Employee>()
.WhereRestrictionOn(e => e.Age).IsBetween(25).And(30)
.Select(e1 => e1.SelectAvg(e2 => e2.Salary))
.List<double>()
.Single();
Perfect!
In my opinion this one is the best.
Tuesday, January 5, 2010
IZWebFileManager 2.5.2 has been released
IZWebFileManager 2.5.2 has been released
It includes:
* FileDownload event
* New Swedish translation (by Peter Strömblad)
* IE8 compatibility fixes
The release is available for download from Google Code
https://code.google.com/p/izwebfilemanager/
Cheers!
It includes:
* FileDownload event
* New Swedish translation (by Peter Strömblad)
* IE8 compatibility fixes
The release is available for download from Google Code
https://code.google.com/p/izwebfilemanager/
Cheers!
Monday, November 30, 2009
Mapping URLs using ASP.NET 2.0 Web Forms
ASP.NET 4.0 is coming with new feature - URL routing with ASP.NET Web Forms
It is pretty cool feature, but require upgrade up to .NET 4.0.
I am not sure that such a good feature is a real reason to get upgraded, and in most cases you will stay with current version on .NET.
But I want it and I want it now, with .NET 3.5. I am going to implement it!
It is pretty cool feature, but require upgrade up to .NET 4.0.
I am not sure that such a good feature is a real reason to get upgraded, and in most cases you will stay with current version on .NET.
But I want it and I want it now, with .NET 3.5. I am going to implement it!
Tuesday, November 24, 2009
ASP.NET MVC Model Binding and Model's fields
A Model Binding in MVC provides a simple way to map posted form values to a .NET Framework type and pass the type to an action method as a parameter.
Everything works fine while a model has public properties like this:
But if you try to use public fields instead of properties like this:
you will be surprised to get the model passed to controller's action with no assigned fields.
It happens because ASP.NET MVC use DefaultModelBinder by default which deals with properties but not with fields when map posted form values.
Of course you can use properties instead of fields wherever you need model bindings. But it is an annoying limitation.
ASP.NET MVC allows us to override both the default model binder, as well as add custom model binders, through the ModelBinders static class:
There are more blog entries about ASP.NET MVC Model Binding
6 Tips for ASP.NET MVC Model Binding
A better Model Binder
Everything works fine while a model has public properties like this:
public Person
{
public string Id {get;set;}
public string Name {get;set;}
...
}
But if you try to use public fields instead of properties like this:
public Person
{
public string Id;
public string Name;
...
}
you will be surprised to get the model passed to controller's action with no assigned fields.
It happens because ASP.NET MVC use DefaultModelBinder by default which deals with properties but not with fields when map posted form values.
Of course you can use properties instead of fields wherever you need model bindings. But it is an annoying limitation.
ASP.NET MVC allows us to override both the default model binder, as well as add custom model binders, through the ModelBinders static class:
ModelBinders.Binders.DefaultBinder = new SomeCustomDefaultBinder();
ModelBinders.Binders.Add(typeof(Person), new PersonModelBinder());
There are more blog entries about ASP.NET MVC Model Binding
6 Tips for ASP.NET MVC Model Binding
A better Model Binder
Subscribe to:
Posts (Atom)