Skip to main content

Asp.net mvc entity framework code first appoach.

Entity Framework comes with three approaches for development.

1) Database First: In this approach you already have your database and the entity framework will generate the model for you.

2) Model First: You don't have the database in this approach and you manually create the domain model using the entity framework designer. After creating the model the designer will generate the ddl statement which will be used to create the database.

3) Code First which I am covering in this post was introduced in EF 4.1. Code first allows you to create the domain model in the code without using the designer. After that EF will be generating the database for you. This approach is used only if you don't have the database the first time. If the database exists use the first approach. So here how the things goes.
public class User
{
    [Key]
    public int UserID { get; set; }
    [Required]
    public string UserName { get; set; }
    [Required]
    public string Password { get; set; }
    [MaxLength(30)]
    public string EmailAddress { get; set; }
  
}


The above class has no value on it's own . In order to take part in the database generation you have to create the context class.

public class UserContext: DbContext
{
     public DbSet<User> Users { get; set; }
}


Then the controller class.

public ViewResult Index()
{
    return View(db.Users.ToList());
}

Running the application the first time.

Now the thing is that you have to run the application for the first time i.e query the database as done in the Index ActionMethod to generate the database. There are two possibilities here if it finds the connection string with the name UserContext in the web.config it will generate the database there.

<add name="UserContext" connectionString="Data Source=localhost;Initial Catalog=testing2;Persist Security Info=True;User ID=sa;Password=123456" providerName="System.Data.SqlClient"/>

If not then it will generate the database in the sqlexpress installed i.e go with convention.

Running the application the second time.

After generating the database in the first try, if the model changes and you run it the second time it will generate an error. So to fix it you have to specify the strategy for EF that whenever it sees the database with the model changed then drop and recreate the database.

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<UserContext>());
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

Comments

Popular posts from this blog

Asp.net mvc razor render partial view using ajax helper

This is the extension to my blog in which I demonstrated rendering of the partial view using jquery Ajax . I want to demonstrate here yet another way by which partial view can be rendered without page refresh. Here is the implementation. Step 1: I will again be using DisplayData class in my demo. Here is it. public class DisplayData { public int ID { get; set; } public DisplayData(int ID) { this.ID = ID; } } Step 2: Create a PartialDemo page @model IEnumerable<MvcApplication5.Models.DisplayData> @{ ViewBag.Title = "PartialDemo"; } @Ajax.ActionLink("Click 1", "PartialDemo", "PartialDemo", new {Data= "1" }, new AjaxOptions { UpdateTargetId = "rsvpmsg" }) @Ajax.ActionLink("Click 2", "PartialDemo", "PartialDemo", new {Data= "2" }, new AjaxOptions { UpdateTargetId = "rsvpmsg" }) <div id="rsvpms

Asp.net mvc razor render partial view using jquery Ajax

I will going to demonstrate how we can render PartialViews using Jquery Ajax. I will be clicking an a href link ,then I will be calling the controller through jquery Ajax which will fill the partialview for a really nice user experience. Step 1: First of all we will be creating an DisplayData class for the use for this example in the model. public class DisplayData { public int ID { get; set; } public DisplayData(int ID) { this.ID = ID; } } Step 2: We will create a Clicks page and write the following code on it. Specially note empty here which will going to empty and then fill partialview with new records. $(document).ready(function () { $('.msg').click(function () { var id = this.id; $.ajax({ url: "/Category/Display", data: { data: id }, success: function (mydata) { $("#link").empty().appe

Asp.net mvc DataAnnotation ValidateAttribute two properties comparison.

Using Datannotion is great but there are scenarious in which the current attributes compare, range etc becomes inadequate especially for the comparisions. So we create here our own custom validation using ValidationAttribute class which is the base class for all the annotation attributes. So by deriving from it and overriding the Isvalid method we can create our custom attribute for the model. So here is the scenario in which I will be validating the Username against the password which should not be equal. Compare attribute cannot be used in this scenario so I have created a custom attribute for that. Here is the model with the attribute. User View Model [CompareUserPass("UserName", "Password", ErrorMessage = "UserName and password cannot be equal")] public class UserView { [Required(ErrorMessage = "UserName Required")] public string UserName { get; set; } [Required(