All previous topics were about Azure and how to work with that great technology. But each large project should be localized. We had a case when a project was under development for several years, had a big database and a lot of pages and needed to be localized.
In this article I will show you architecture for that localization. I will do it in simple way and will show general moments: how to save a current language? Work with localized database and localized strings in code or HTML.
First we need to open out MVC solution and database project.
Let's change our database project. In very first step we should create table “Language”:
In the previous article we have created Solution that has Web Role. It allows us to publish this solution on Windows Azure. Also, in this solution we have a connection to created storage account in Azure. We have log manager Log4net that allows us to write some logs in Blob table. In last article we have created a database in Windows Azure SQL server and a database project for this database. So now we can start to use this database in our solution. We will use Entity Framework for this purpose. Entity Framework allows generating entity classes from the database.
We will use EDMX file to do this. A .edmx file is an XML file that defines a conceptual model, a storage model, and the mapping between these models. An .edmx file also contains information that is used by the ADO.NET Entity Data Model Designer (Entity Designer) to render a model graphically. The recommended practice for creating an .edmx file is to use the Entity Data Model Wizard.
In the first step we should open our “MvcApplicationWebRole” solution. Now let’s add a new class library in our solution. Right click on the solution then “Add – New project”. In occurred window enter name “MvcApplicationWebRole.Database” and select “Class Library” as project type:
Add new project in solution
A DataSet is a collection of data.
Most commonly a DataSet corresponds to the contents of a single database table, or a single statistical data matrix, where every column of the table represents a particular variable, and each row corresponds to a given member of the DataSet in question. The DataSet lists values for each of the variables, such as height and weight of an object, for each member of the DataSet. Each value is known as a datum. The DataSet may comprise data for one or more members, corresponding to the number of rows.
Our experience tells that using DataSets in projects is not the best solution. But in some situation, it could be the case when, for example, we need a project for support and there won't be another way except - to work with DataSets.
The term DataSet may also be used more loosely, to refer to the data in a collection of closely related tables, corresponding to a particular experiment or event.
List instead of DataSet
DataSet are not useful. Because property name should be as the string.
var age = Convert.ToInt32(members[i]["MemberAge"].ToString());
But if someone will change column name - application still build without errors but at runtime you will receive an exception "Column abc does not belong to the table?"
And this is not quite easy to work with DataSets during Debugging and it is not very useful. Plus there are some other minor reasons why we should not use DataSet.
Instead of DataSet we can use List. But this is not a method that can convert DataTable (item of DataSet) to List.
There are two solutions how to convert DataTable to List.
- First solution - with Automapper.
Here is the code: