Tuesday, July 5, 2011

Invalid Object Name with Entity framework -EFCodeFirstCTP5

Recently I was working on one sample application with EFCodeFirst with the existing database.After doing all the coding I have found a error “Invalid object name 'dbo.Customers'.”. Following was my code for data context.

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace CodeSimplified.Models
{
  public class MyDataContext:DbContext
  {
      public DbSet<Customer> Customer { get; set; }

      protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
      {
     
      }
  }
}

And following is code for my entity model class.

public class Customer
{
  public int CustomerId { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string Address { get; set; }
  public string City { get; set; }
}

Once I run the application I was getting following error.

Error

As you can see from my code that it should be dbo.customer name. So after digging into the issue I have found that I need to remove the plural table name. Here is a forum that is saying the same.

http://social.msdn.microsoft.com/Forums/en-ie/adonetefx/thread/719f3e4d-073b-49fe-9968-945acde27bb7.

Now there are two ways of resolving this issue.
1) Either explicitly map entity class with table attribute like I have changed my code like following.

[Table("Customer",SchemaName="dbo")]
public class Customer
{
  public int CustomerId { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string Address { get; set; }
  public string City { get; set; }
}

Another one is you need to remove default plural table name via overriding the onModelCreating event like following.

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Data.Entity.ModelConfiguration.Conventions.Edm.Db;

namespace CodeSimplified.Models
{
  public class MyDataContext:DbContext
  {
      public DbSet<Customer> Customer { get; set; }

      protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
      {
          modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
      }
  }
}

That’s it now error is gone. My code is work perfectly!!. Hope this will help you.Stay tuned for more..Till that happy programming.

Shout it

kick it on DotNetKicks.com
Share:
Saturday, July 2, 2011

Wohooooo!!! I got Microsoft MVP award again for Visual C#

Yesterday I got great news from Microsoft. I have been awarded as Microsoft MVP again for year 2011-2012. Yesterday I got following email.



Dear Jalpesh Vadgama,

Congratulations! We are pleased to present you with the 2011 Microsoft® MVP Award! This award is given to exceptional technical community leaders who actively share their high quality, real world expertise with others. We appreciate your outstanding contributions in Visual C# technical communities during the past year.

It is really one of the proudest moment of my professional life. When you get this kind of appreciation its feel great.

On this occasion I would like to thank my Friends,Employer,co-workers, Community friends and readers for providing support for me. I would also like to thank my MVP lead Abhishek Kant for guiding me throughout year. Last but not least my family members who are been there for me for my every ups and down. My father and mother who is inspiration of mine. My lovely brother Vishal who encourage me to do all this and My Lovely wife Reena who is supporting me for this in every possible way and my little champ Teerth from whom I am getting energy to do this.

Once again Thanks Microsoft for this.

Shout it
Share:
Wednesday, June 29, 2011

Code refactoring with Visual Studio 2010 Part-4

I have been writing few post with code refactoring features in Visual Studio 2010. This post also will be part of series and this post will be last of the series. In this post I am going explain two features 1) Encapsulate Field and 2) Extract Interface. Let’s explore both features in details.

Encapsulate Field:


This is a nice code refactoring feature provides by Visual Studio 2010. With help of this feature we can create properties from the existing private field of the class. Let’s take a simple example of Customer Class. In that I there are two private field called firstName and lastName. Below is the code for the class.

public class Customer
{
 private string firstName;
 private string lastName;
 public string Address { get; set; }
 public string City { get; set; }

}

Now lets encapsulate first field firstName with Encapsulate feature. So first select that field and goto refactor menu in Visual Studio 2010 and click on Encapsulate Field. Once you click that a dialog box will appear like following.

EncapsulateField

Now once you click OK a preview dialog box will open as we have selected preview reference changes. I think its a good options to check that option to preview code that is being changed by IDE itself. Dialog will look like following.

PreviewEncapsulateField

Once you click apply it create a new property called FirstName. Same way I have done for the lastName and now my customer class code look like following.

public class Customer
{
 private string firstName;

 public string FirstName
 {
     get { return firstName; }
     set { firstName = value; }
 }
 private string lastName;

 public string LastName
 {
     get { return lastName; }
     set { lastName = value; }
 }
 public string Address { get; set; }
 public string City { get; set; }

}

So you can see that its very easy to create properties with existing fields and you don’t have to change anything there in code it will change all the stuff itself.

Extract Interface:


When you are writing software prototype and You don’t know the future implementation of that then its a good practice to use interface there. I am going to explain here that How we can extract interface from the existing code without writing a single line of code with the help of code refactoring feature of Visual Studio 2010. For that I have create a Simple Repository class called CustomerRepository with three methods like following.

public class CustomerRespository
{
public void Add()
{
    // Some code to add customer
}

public void Update()
{
    //some code to update customer
}

public void Delete()
{
    //some code delete customer
}
}

In above class there are three method Add,Update and Delete where we are going to implement some code for each one. Now I want to create a interface which I can use for my other entities in project. So let’s create a interface from the above class with the help of Visual Studio 2010. So first select class and goto refactor menu and click Extract Interface. It will open up dialog box like following.

ExtactInterface

Here I have selected all the method for interface and Once I click OK then it will create a new file called ICustomerRespository where it has created a interface. Just like following.

SolutionExplorer

Here is a code for that interface.

using System;
namespace CodeRefractoring
{
 interface ICustomerRespository
 {
     void Add();
     void Delete();
     void Update();
 }
}

Now let's see the code for the our class. It will also changed like following to implement the interface.

public class CustomerRespository : ICustomerRespository
{
public void Add()
{
    // Some code to add customer
}

public void Update()
{
    //some code to update customer
}

public void Delete()
{
    //some code delete customer
}
}

Isn't that great we have created a interface and implemented it without writing a single line of code. Hope you liked it. Stay tuned for more.. Till that Happy Programming.

Shout it

kick it on DotNetKicks.com
Share:

Support this blog-Buy me a coffee

Buy me a coffeeBuy me a coffee
Search This Blog
Subscribe to my blog

  

My Mvp Profile
Follow us on facebook
Blog Archive
Total Pageviews