Click here to Skip to main content
Click here to Skip to main content

Enterprise Application Architecture: Designing Applications and Services in .NET - Part II

By , 15 Nov 2010
 

Introduction

  • Part 1 (Distributed Application Layers with project details): Learn about what layered design in distributed environment is and how we are going to name it while implementing the actual app.
  • Part 2 (Database and Library Design): Learn about database design and implementing library which interacts with Edmx container [this article].
  • Part 3 (Engine and Service Managers design): Learn how to implement the engine which has core business logic and implementing the actual WCF service with service contracts. And also how to test the service using test client.
  • Part 4 (Client implementation): Learn how to implement the actual client with MVVM pattern which invokes services.

This is the second article in a canonic series about the Enterprise Application Architecture design. In the previous article, we discussed about distributed application layers and how we are going to implement these layers in a sample application (Customer Order Management System (COMS)). So in this article, I am going to describe about database design, entity container and library implementation. Project names will remain the same as mentioned at the right side of architecture diagram explained in part 1.

Background

The very first thing in any application design is creating the underlying database to support it. We should be very careful while designing database since we have to cover most possible business logic in the database itself instead of writing in client side code. To be frank, I am not an expert in database design. Please feel free to comment if you think something is less accurate. Let’s start our database design.

Customer Order Management System Database Design

I’ll take a few sample use cases for implementation in COMS (Customer Order Management System) with these four tables for a demonstration.

  • Customer Table - Contains customer data such as name, id, address, shipping address, billing address, etc.
  • Product Table – Contains product data such as product name, description, unit price, etc.
  • Order Table - Contains data on when an order was placed including Customer ID, order date, shipping date, etc.
  • OrderDetail Table - Contains data on each product ordered on one order (because you can purchase multiple items on a single order) including the product ordered, quantity, unit price, discounts, etc.

As you might be aware, for a relational database to work properly, you should have a field in each database that uniquely identifies (Primary Key) that row in your database table. Also, we should have a link in the table based on its relationship (Foreign Key). The table below illustrates relationships between the tables.

Table and Key Details

Table Primary Key
Customer CustomerID
Product ProductID
Order OrderID
OrderDetails OrderDetailsID

Table Relationship Details

Table Related With Foreign Key
Orders Customers CustomerID
OrderDetails Orders OrderID
OrderDetails Products ProductID

Have a look into the below mentioned database design image for more ideas.

Database_design.PNG

(Figure 1 – Customer Order Management System Database Design diagram.)

Create Database and Tables in Microsoft SQL Server

Before creating the tables, we have to create our own database in SQL Server. Please note that I am using Microsoft SQL Server Management Studio Express for creating database and tables.

Open the Microsoft SQL Server Management Studio Express and you could see the window as given below:

DatabaseDesign1.PNG

(Figure 2 – Microsoft SQL Server Management Studio Express)

Now, for creating the database, please follow the steps as mentioned here by Microsoft tech net guys. I assume that you are giving database name as Customer Database. After creating the database, you could see some predefined objects getting displayed under your database in object explorer tree such as Tables, Database Diagram, etc. Please see the below image.

DatabaseDesign2.PNG

(Figure 3 – Customer Order Management System Database)

Now we are all set to go ahead with table creation.

To create a new table with Table Designer:

  • Right-click the Tables item of your database in Object Explorer and click New Table.
  • Type column names, choose data types, and choose whether to allow nulls for each column.
  • From the File menu, choose Save table name.
  • In the Choose Name dialog box, type a name for the table and click OK.

Create all the four tables that I have mentioned in the database design section with proper primary key. After creating all the tables, we also have to create foreign key for the tables as I have mentioned in database design section.

You can create foreign key using SQLQuery analyzer. Click the New Query button which is available in the SQL Express toolbar, and paste the below queries in query window, select all the queries and press F5. Once you’re done with this, foreign key will be created automatically.

ALTER TABLE Orders WITH CHECK ADD  CONSTRAINT [FK_CustomerID] FOREIGN KEY([CustomerID])
REFERENCES [Customers] ([CustomerID])

ALTER TABLE OrderDetails WITH CHECK ADD  CONSTRAINT [FK_OrderID] FOREIGN KEY([OrderID])
REFERENCES [Orders] ([OrderID])

ALTER TABLE OrderDetails WITH CHECK ADD  CONSTRAINT [FK_ProductID] FOREIGN KEY([ProductID])
REFERENCES [Products] ([ProductID])

I assume that you have done everything successfully upto this stage. Oh great :). Now we’re done with customer order management system database design. See the below image which has four tables and some sample customer’s data.

FinalDatabaseDesign.PNG

(Figure 4 – Customer Order Management System Database with Tables)

I hope that you have got an idea about how to design the database.

Entity Container and Library Implementation

As we discussed in the architecture diagram which is explained in part 1, we are going to discuss and implement the second level from the bottom (Data Access Layer). See the image given below:

LibraryLayer.PNG

(Figure 5 – Library details)

You could see that I have mentioned clearly about what language and technology we are going to use for implementing this layer with projects name details. So before starting with implementation, we will discuss a bit about the purpose of this layer.

Typically Data Access Layer is for communicating with database to store/retrieve the data. Earlier, we used to write this layer with the help of pure ADO.NET. But now, .NET Framework provides ADO.NET Entity Data Model utilities by default. So using Entity Data Model Wizard, we can create edmx file which describes the target database schema, and defines the mapping between the EDM and the database.

Why class library for interacting with edmx? Can’t we use edmx file directly in business logic layer? Yes. Better not to use edmx file directly in business logic layer. Business logic should be an independent layer. If you use edmx file directly in business logic, that means you are losing extensibility of your platform. For instance, if you add some additional field in the database; you have to touch your business logic again. To avoid this dependency, we are exposing interfaces and methods in library to interact with the edmx file.

Create EDMX and Library Projects

We are here to learn how to create these two projects and what type of project templates needs to be selected.

Type of Projects

  • A Class Library
  • An Entity project with an edmx
  • A Test Client project

The Solution

Open Visual Studio 2010 and select the Class Library project template from Visual C# -> windows. Look at the solution and project name in the given snapshot.

CreateLibrary.PNG

(Figure 6 – Project Template For Library)

I have given the same name (“ServiceLibaries.CustomerServiceLibrary”) as mentioned in the architecture diagram. I have added two folders and .cs files for the implementation in the solution. One is for CustomerServiceLibrary interface and another one is for the actual method implementation. But don’t worry; there is no code inside the files now. Here is the structure of my VS solution.

LibraryProjectWithSolution.PNG

(Figure 7 – Library Project)

Let’s start creating an edmx file and then we will get back to the actual library implementation. Here are the steps for generating edmx file from a specific database.

  • In solution explorer, right-click on the solution, add one more project for maintaining edmx files. Keep the project name as “CustomerOrderManagementSystemDEM”.
  • Right-click CustomerOrderManagementSystemDEM project, and then click Add-->New Item.
  • From the Add New Item dialog box, select Data in the left pane and select ADO.NET Data Entity Model.
  • In Name, enter edmx file name “CustomerOrderManagementSystemEntityDataModel” and click ok.

EdmxAdd.PNG

(Figure 8 – Solution with Edmx project)

Now you will be asked to proceed with Entity Data Model Wizard. Select Generate from Database option from the wizard and choose your data connection from the combo box. If you don’t find your database in combo box, click the New Connection button and choose your Server name, Data source, Authentication type (Leave it as Use Windows Authentication), Database name “Customer Database” and click ok.

NewConnectionString1.PNG

(Figure 9 – New Connection Dialog Window)

Then you will get the page with connection string details as the given below. Click the next button and choose the tables that you want to generate entities. I selected all the four tables. Change the model namespace at bottom of the dialog window (optional), and click Finish button.

NewConnectionString.PNG

(Figure 10 – New Connection String)

FinalTableList.PNG

(Figure 11 – Complete Database)

When you hit the Finish button, Visual Studio starts to generate the edmx file with app.config file for you. Once it’s generated, you could see ConnectionStrings tag in the XML file with other attributes such as connection string and provider name details.

<configuration /><?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="Customer_DatabasesEntities" 
	connectionString="metadata=res://*/CustomerOrderManagementSystemEntityDataModel.
	csdl|res://*/CustomerOrderManagementSystemEntityDataModel.ssdl|res:
	//*/CustomerOrderManagementSystemEntityDataModel.msl;
	provider=System.Data.SqlClient;
	provider connection string='Data Source=XXXXX-PC\SQLEXPRESS;
	Initial Catalog="Customer Databases";
	Integrated Security=True;MultipleActiveResultSets=True'" 
	providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Apart from the configuration file, .edmx file (with code-behind) is also generated. If you open .cs file, you could see all the tables generated as an entity object class along with default object context class (“Customer_DatabasesEntities”). These are the class that we are going to use in our library to interact with database.

EntityModelinC_.PNG

(Figure 12 – Entity Objects and Object Context Class)

That’s it. We’re done with the edmx file generation. Let’s come back with the library implementation, as we discussed already, we have two .cs files in the library project. Now we can directly go ahead with the implementation part. Here is the ICustomerServiceLibrary interface which contains the methods declaration to provide customer details as well as saving data in database.

public interface ICustomerServiceLibrary
    {
        /// <summary>
        /// Get all the customers data
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        List<Customer> GetCustomers(Customer_DatabasesEntities context);

        /// <summary>
        /// Get specific customer data with customer ID
        /// </summary>
        /// <param name="customerID"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        Customer GetCustomer(int customerID, Customer_DatabasesEntities context);

        /// <summary>
        /// Get the actual Entities object context from edmx.
        /// </summary>
        /// <returns></returns>
        Customer_DatabasesEntities GetEntitiesObjectContext();

        /// <summary>
        /// Save the data in database with specific context.
        /// </summary>
        /// <param name="context"></param>
        void Save(Customer_DatabasesEntities context);
    }

Interface provides four functionalities:

  • GetCustomers – Returns all the customers data from database with the help of entity object context.
  • GetCustomer(int CustomerID) – Returns the specific customer details which takes customer id as argument.
  • GetEntitiesObjectContext() – Returns the actual Customer Databases Entities object context.
  • Save (context) – Saves the data in database.

Let’s go ahead with the actual implementation of the methods:

namespace ServiceLibraries
{
    public class CustomerServiceLibrary : ICustomerServiceLibrary
    {
        // Database entity context.
        Customer_DatabasesEntities context = null;

        /// <summary>
        /// Constructor which initialize including context.
        /// </summary>
        public CustomerServiceLibrary()
        {
            context = new Customer_DatabasesEntities();
        }

        #region ICustomerServiceLibrary Members

        /// <summary>
        /// Returns customers data as list.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public List<Customer> GetCustomers(Customer_DatabasesEntities context)
        {
            return context.Customers.ToList() ;
        }
    
        /// <summary>
        /// Returns specific customer detail. 
        /// </summary>
        /// <param name="customerID"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public Customer GetCustomer(int customerID, Customer_DatabasesEntities context)
        {
            var cust = from customer in context.Customers 
		where customer.CustomerID == customerID select customer;
            return cust.FirstOrDefault();
        }

        /// <summary>
        /// Saves the data in database and disposing the context.
        /// </summary>
        /// <param name="context"></param>
        public void Save(Customer_DatabasesEntities context)
        {
            context.SaveChanges();
            context.Dispose();
        }

        /// <summary>
        /// Returns the context reference.
        /// </summary>
        /// <returns></returns>
        public Customer_DatabasesEntities GetEntitiesObjectContext()
        {
            return context;
        }
        #endregion
    }
}

Constructor of the CustomerServiceLibrary class creates the entity object context instance and it’s shared across the class. In case, if engine wants the entity context object for saving data into the database, we can get through GetEntitiesObjectContext method via library instance.

Save method is used for saving new data in database. You can see context.SaveChanges() method called inside the Save method. This method saves the changes in database. To call this method, you have to add System.Data.Entity assembly reference in library project. Don’t forget to add this assembly in your library. Otherwise, you will get a compilation error.

That’s all. Now the library is ready for the customer data service. Can we test this library through some test client? Yes. Let’s create a simple console application for testing this library.

Test Client

I have added a test client project in the attached sample. This client project contains the code to displays the customer’s data in console. Also, it will ask you to type new customer details. After entering the new customer details, it will display all the customer data again from the database including new customer data. Remember that you should add both our library and edmx project in client project as reference. Here is the client code:
static void Main(string[] args)
        {
            ICustomerServiceLibrary service = new CustomerServiceLibrary();
            List<customer /> list = service.GetCustomers(service.GetEntitiesObjectContext());
            Console.WriteLine("Customer ID" + "First Name".PadLeft(21) + 
		"Last Name".PadLeft(29));
            Console.WriteLine("========================================================");
            int lastCustId = 0;
            foreach (Customer data in list)
            {
                Console.WriteLine(data.CustomerID + data.FirstName.PadLeft(48) + 
		data.LastName.PadLeft(10));
                lastCustId = data.CustomerID;
            }

            Customer newCustomer = new Customer();

            Console.WriteLine("Enter New Customer Details");

            Console.WriteLine("First Name:");
            newCustomer.FirstName = Console.ReadLine();
            Console.WriteLine("Last Name");
            newCustomer.LastName = Console.ReadLine();
            Console.WriteLine("Email Id");
            newCustomer.Email = Console.ReadLine();
            Console.WriteLine("Address1");
            newCustomer.Address1 = Console.ReadLine();
            Console.WriteLine("Address2");
            newCustomer.Address2 = Console.ReadLine();
            newCustomer.CustomerID = ++lastCustId;

            service.GetEntitiesObjectContext().AddToCustomers(newCustomer);
            service.Save(service.GetEntitiesObjectContext());
            Console.WriteLine("Customer Data Stored Successfully");

            service = new CustomerServiceLibrary();
            List<customer /> newlist = service.GetCustomers(service.GetEntitiesObjectContext());
            Console.WriteLine("Customer ID" + "First Name".PadLeft(21) + 
			"Last Name".PadLeft(29));
            Console.WriteLine("=========================================================");
            foreach (Customer data in newlist)
            {
                Console.WriteLine(data.CustomerID + data.FirstName.PadLeft(48) + 
		data.LastName.PadLeft(10));
            }
            Console.ReadLine();
        }

Test Client Output

Client.PNG

(Figure 13 – Test Client)

Note

Make sure that connection string is mentioned in the client config file. Otherwise application never connects with the database.

For running the attached sample application, you will have to create the database and tables in your SQL Server management studio express. But, for your convenience, I have attached the database backup file, so that you can just download and import into your SQL server. If you have any questions about how to import the database in SQL Server, please visit this site.

Oops. At the last moment of completing this article, my colleague Boopalan who is also good in tech side raised this question. Why don’t you integrate your database in Visual Studio itself? Yes. He is absolutely correct. Why do I want to kill your time for running demo sample? So I decided to explain how to manage/integrate the database in Visual Studio itself and posted an article here. If you decided to go ahead with this logic, you don’t want to restore the database backup file that is uploaded along with in the sample source. However, I still leave this traditional database design concept which I have explained in this article since it will be helpful for some folks who don’t have idea about it.

I am really delighted with the logic and sample app, and I do think it's really easy to run from your end. As such, I sure would really appreciate some votes, and some comments if you feel this post will help you out in entity access through library :).

As I stated in the introduction, the remaining parts will be posted one by one.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

venugopalm
Software Developer (Senior) Logitech Engineering & Design (India) Pvt. Ltd.
India India
Member
Venugopal works as a Senior Software Engineer in Logitech Engineering & Design (India) Pvt. Ltd. He hold a Masters in Computer Applications and has 4+ years experience in C#, XAML, Silverlight & WPF.
 
Venugopal firmly believes "technology is impermanent, change is not"!. While he has strong technical inclination towards MS technologies, he is deeply passionate about pursuing his career in Windows7-WPF and Silverlight Technology.
 
Venu engages in a wide gamut of temperamental hobbies ranging from making friends, traveling, helping his friends studies. To murmuring songs and watching movies in leisure time.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5member$andesh M Patil20 Apr '13 - 8:36 
Good one. Tried myself to implement. Found one error in TestClient there is a line of code
List<customer /> newlist = service.GetCustomers(service.GetEntitiesObjectContext());
Instead it should be
 List<customer> newlist = service.GetCustomers(service.GetEntitiesObjectContext());
Also in TestClient i got connection string error as follows,
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
After searching on Google, i got the solution, we have to add the connectionstring of edmx project in testclient app.config.
 
Thanks for Sharing. Smile | :)
GeneralMy vote of 5memberFerivmx5 Feb '13 - 7:54 
I am pretty new in this concept but I have been following step by step. this is quite clear. Thanks
GeneralMy vote of 4memberAndrea Pierangeli3 Dec '12 - 23:55 
Good post even if too simple in my opinion... Enterprise applications are SO MUCH more complex!
GeneralNice workmemberShahriar Iqbal Chowdhury15 Oct '12 - 11:01 
I loved the series, nice work
GeneralMy vote of 5mvpKanasz Robert28 Sep '12 - 7:09 
very interesting article
GeneralMy vote of 5memberUdara Chinthaka Amarasinghe4 Aug '12 - 6:16 
Thanks Mr.Venugopal you will save my trainee ship.
QuestionCoding against concrete classes? violationmemberparitoshcoder068612 May '12 - 6:47 
Hi,
 
Thanks for writing a very good article , but I have one confusion here you are returning a List in GetCustomers method ,trying to figured out it is not violation of the coding against concrete classes... Am i correct or just feeling a Lot of design principle
Correct if I am worng
QuestionHelp needed regarding app.configmemberAdil Khalil29 Apr '12 - 19:56 
app.config for the EDM is added to the "CustomerOrderManagementSystemDEM" project, now when I try to instantiate "Customer_DatabasesEntities" with "new" in "CustomerServiceLibrary" class of Services Library, it is giving me compile time error saying that Customer_DatabasesEntitiesis not a valid object.
 
can you please rectify where am I mistaken? Do I need to add app.config to ServiceLibrary as well? Suggest. I am using VS2008.
 
Thanks,
Adil Khalil
GeneralMy vote of 5memberHassanChaaban8 Feb '12 - 10:17 
This Is The Best Architecture
QuestionThanks for Great Article... but please calrify my doubtmemberpodal20 Jul '11 - 23:01 
Hi,
Really nice article for beginner like me in design side. Actually i am planning to create SOA for my version of product. Actually i am new entity framework and after i read your artciles intereted in it. But i didnt found a way to use stored procedure there. So how i access complex relational queries to retrieve from database for report display and also for Gridview etc. Can you give suggesions or good article for thi. I also appreciate if we can chat or mail conversation also if you have time. my id : akhilrajau@gmail.com
QuestionNice Articlemembertadeze21 Jun '11 - 23:29 
Very nice and please continue!
GeneralExcellent ExplanationmemberAzeemMaaz4 Apr '11 - 6:21 
Hi Venu,
 
Thanks for the excellent explanation. I have just started learning programming and still not sure how to start or where to start from? I would appreciate if you could guide me through. I would like to chat with you personally and go from there. My email is abdulazeem07@gmail.com.
I hope to hear soon from you.
 
Thanks
Azeem
GeneralRe: Excellent Explanationmembervenugopalm4 Apr '11 - 21:14 
Hi Azeem,
 
Thanks.You can contact me through my gmail id venuvirtualmca@gmail.com.
 
-Venugopal.
MVVM devotee Smile | :)

GeneralMy vote of 5memberokutkd21 Mar '11 - 7:16 
iam a big fan of designing software architecture. Your serial articles are nice and useful Smile | :)
GeneralMy vote of 3memberSergio Sanchez en11 Jan '11 - 3:56 
I am sorry to say that this is not a very good "Enterprise Architecture", for several reasons, besides the obvious errors which should be corrected:
The E/R diagram is wrong. The Orders Entity is referencing itself.
The Service Layer is very strongly coupled with the Entity Framework.
The Save method in the Service Layer implementation is disposing the context, so any further call to the service layer will throw an error. The Save method itself is totally unnecessary in this example, since the library does not have support create / update / delete operations.
I would suggest looking into the repository and the unit of work patterns in order to make the Data Access Layer a little more enterprise-like.
GeneralMy vote of 5memberezekjh16 Nov '10 - 12:18 
Really great. Very useful and instructing.
Greetings from Argentina.
GeneralThird part postedmembervenugopalm15 Nov '10 - 0:16 
Hi All,
 
Sorry for the delay. As I said, I was in vocation. Last week returned and got time for preparing third part.
 
I posted third part here. Please have a look and let me know if you have any questions. Dont forget to put your vote please .
 
Enterprise Application Architecture: Designing Applications and Services in .Net - Part III[^]
 
Thanks,
Venugopal.
MVVM devotee Smile | :)

GeneralMy vote of 5memberTeddy Segoro25 Oct '10 - 22:36 
so far probably the best article for beginners. you explain really well, Venugo
GeneralRe: My vote of 5membervenugopalm1 Nov '10 - 3:16 
Hi Teddy,
 
Thanks. Will continue further.
 
-Venugopal.
MVVM devotee Smile | :)

GeneralNext in seriesmemberFaith0121 Oct '10 - 12:53 
Hi Venugopal
 
I have seen in the past, people coming up with great ideas (from memory Jump Start ASP.Net, a great article of its times), but then the author failed to follow up and did not complete the series.
 
I personally have been an ardent believer of good programming and found your article very helpful to all the beginners and even advanced programmers.
 
So, please wake up and complete the series and raise the bar for the programming standards
 
Waiting for your next articles.
 
Regards

modified on Thursday, October 21, 2010 10:20 PM

GeneralRe: Next in seriesmembervenugopalm1 Nov '10 - 3:15 
Hi Faith,
 
I could understand your thoughts Smile | :) . Please refer this message. This is the only reason for dely.
 
http://www.codeproject.com/KB/architecture/EnterpriseAppArch_Part_II.aspx?msg=3652763#xx3652763xx
MVVM devotee Smile | :)

GeneralRe: Next in seriesmembervenugopalm15 Nov '10 - 0:15 
Hi,
 
Posted part III.
 
Enterprise Application Architecture: Designing Applications and Services in .Net - Part III[^]
MVVM devotee Smile | :)

QuestionWhat should be the architecture of service??membermazzy_b20 Oct '10 - 21:56 
Hi venugopalm,
That was nice explanation.
I start following the architecture you mentioned in your 1st post now i just have one query.
As in your exapmle you use just one Contract "ICustomerServiceLibrary" for all the operation related to Customer and one class "CustomerServiceLibrary" to implement.
 
Sir I just want to confirm if you have to use number of entities(like Products, Orders) in your service then will you
 
1. Will you create different contract for different entities??
2. Will you implement those different contract in different classes??
3. Will they be hosted on different endpoints??
 
Please reply soon i am waiting
Thanks.
 
Thanks
Munish Bhargav
AnswerRe: What should be the architecture of service??membervenugopalm1 Nov '10 - 3:11 
Hi Munish,
 
Thanks for following the architecture that we are discussing here. Sorry for the late reply. I was in vacation. Was not able to check my mails.
 
Here is the answer for your questions.
 
1. Will you create different contract for different entities??
2. Will you implement those different contract in different classes??
3. Will they be hosted on different endpoints??
 
Yes. You are correct on all the above questions. Then only we can provide specific contract to particular client based on profile. For instance, if you want provide only order related API for your customer without your customer details, you can!. This is called clear separation between layers. Hope you can understand my point. Will explain this more detail in next post.
 
Let me know if you have any questions.
 
Thanks,
Venugopal.
MVVM devotee Smile | :)

GeneralMy vote of 5memberPumbaPumba18 Oct '10 - 8:55 
Well explained. Better than part I. Keep going.
GeneralRe: My vote of 5membervenugopalm1 Nov '10 - 3:00 
Hi Pumba,
 
Thanks. Will post next part soon.
 
-Venugopal.
MVVM devotee Smile | :)

GeneralMy vote of 5 [modified]membersepehr281317 Oct '10 - 0:37 
very good
Thank you so much
continue other parts please

modified on Sunday, October 17, 2010 8:32 AM

GeneralRe: My vote of 5membervenugopalm1 Nov '10 - 2:59 
Hi Sepehr,
 
Thanks for the feedback. Will post remaining parts ASAP.
 
-Venugopal.
MVVM devotee Smile | :)

Generalvery nicemvpShivprasad koirala2 Oct '10 - 6:40 
Keeep it up , agreed better than the first one.
Visit my 500 videos on WCF,WPF,WWF,Silverlight,UML design patters @ http://www.questpond.com

GeneralRe: very nicemembervenugopalm1 Nov '10 - 2:59 
Hi Siva,
 
Thanks for your feedback and your vote.
MVVM devotee Smile | :)

GeneralMy vote of 5memberABCDWXYZ27 Sep '10 - 22:33 
Cant get better explanation than this. Waiting to read the other parts!
GeneralRe: My vote of 5membervenugopalm28 Sep '10 - 6:07 
Hi,
 
Thanks. Will post the third part soon.
 
-Venugopal,
MVVM devotee Smile | :)

GeneralRe: My vote of 5memberFaith0110 Oct '10 - 14:19 
Hi Venugopal
 
I am eagerly waiting for third part.
 
Infact, I am waiting for the whole series.
 
Regards
GeneralRe: My vote of 5membervenugopalm1 Nov '10 - 2:58 
Hi Faith,
 
Sorry for the delay. I was in my marriage vacation. Today only got back to work. Will post remaings parts ASAP.
I appriciate your interest on my post and hope you will get more when you read remaining parts.
 
Thanks,
Venugopal.
MVVM devotee Smile | :)

GeneralRe: My vote of 5memberFaith0111 Nov '10 - 11:48 
Thanks Venugopalm.
 
Congratulations on your Wedding. Hope it brings the best out of you. Smile | :)
 
Waiting for the next release.
 
Thanks
GeneralMy vote of 5memberMichal Stehlik27 Sep '10 - 6:52 
Much better than 1 part. Keep it up Smile | :)
GeneralRe: My vote of 5membervenugopalm27 Sep '10 - 7:05 
Thanks for your vote and feedback Michal.
 
-Venu.
MVVM devotee Smile | :)

GeneralMy vote of 5mentorKunalChowdhury27 Sep '10 - 2:42 
Well represented. Keep it up... Thumbs Up | :thumbsup:
GeneralRe: My vote of 5membervenugopalm27 Sep '10 - 2:55 
Hi Kunal,
 
Thanks for your comments. This is still in pending status?. is there any problem or needs to be done anything from my side?.
 
-Venugopal
MVVM devotee Smile | :)

AnswerRe: My vote of 5mentorKunalChowdhury27 Sep '10 - 17:47 
It's in Public View. Have a look again.


Regards - Kunal Chowdhury | Software Developer | Blog | Twitter | Silverlight Tutorial | Indian Forum

GeneralRe: My vote of 5membervenugopalm27 Sep '10 - 18:00 
Hi Kunal,
 
Yes. Now its ok. But still following article in pending status. Could you please make it as public.
 
Integrating Database Development in Visual Studio[^]
 
Thanks,
Venugopal.
MVVM devotee Smile | :)

GeneralRe: My vote of 5mentorKunalChowdhury27 Sep '10 - 18:11 
Don't worry Venu. Someone will review the article & will make it public.
Without proper review, we can't publish an article.
 
Also, see the comment from Dave: http://www.codeproject.com/Messages/3611581/So-wheres-the-rest-of-the-article.aspx[^]


Regards - Kunal Chowdhury | Software Developer | Blog | Twitter | Silverlight Tutorial | Indian Forum

GeneralRe: My vote of 5membervenugopalm27 Sep '10 - 21:02 
Hi Kunal,
 
Thanks. He made it as public. Thanks for your co-operation.
 
-Venugopal.
MVVM devotee Smile | :)

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 15 Nov 2010
Article Copyright 2010 by venugopalm
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid