Search code examples
entity-frameworkentity-framework-4entity-framework-5entityentity-framework-4.1

Is it possible to add two table's data in Seed method in Entity Framework(Code-first)?


In my DataLayer I have this 'Seed' method:

protected override void Seed(Context context)
        {    
            User u1 = new User()
            {

                UserName = "dayan",
                Password = "dayan",
                Role = "Admin"

            };
            User u2 = new User()
            {
                UserName = "neranjan",
                Password = "neranjan",
                Role = "employee"
            };

            context.Users.Add(u1);
            context.Users.Add(u2);
            base.Seed(context);    
        }

This how my User table looks like:

So now i need to add more table data into this seed method like this:

         Examination e = new Examination()
            {
                Description = "fromda console",
                CutOffMark = 1000,
                QuestionID = new List<Question>()
                { 
                    new Question()
                    {
                        QuestionDes = "Question",
                        Answer1 = "11",
                        Answer2 = "22",
                        Answer3 = "33",
                        Answer4 = "44",
                        Correct = 1
                    }
                }
            }; 

the purpose i need this method to work is because i'm using the code-first entity framework therefore i need to make sure when i drop the the database and create the database again these rows should be written in those tables.

can you please give me an idea how to solve this problem... Thank You!!


Solution

  • this is how i solved it....

    public class ContextSeeder : DropCreateDatabaseIfModelChanges<Context>
    {
        protected override void Seed(Context context)
        {
            Examination e1 = new Examination()
            {
                Description = "Science",
                CutOffMark = 10,
                QuestionID = new List<Question>()
                { 
                    new Question()
                    {
                        QuestionDes = "What is a data bus?",
                        Answer1 = "It carries a word to or from memory",
                        Answer2 = "It is used to store intermediate data and instructions",
                        Answer3 = "It decodes the instructions",
                        Answer4 = "It contains the instruction that is being executed",
                        Correct = 1
                        //ExaminationID = 1
                    }
                }
            };
            Examination e2 = new Examination()
            {
                Description = "Science",
                CutOffMark = 10,
                QuestionID = new List<Question>()
                { 
                    new Question()
                    {
                        QuestionDes = "What is program counter?",
                        Answer1 = "It keeps track of the memory address of the instruction that is to be executed next.",
                        Answer2 = "It is used to store intermediate data and instructions",
                        Answer3 = "It decodes the instructions",
                        Answer4 = "It contains the instruction that is being executed",
                        Correct = 1
                        //ExaminationID = 1
                    }
                }
            };
            Examination e3 = new Examination()
            {
                Description = "Science",
                CutOffMark = 10,
                QuestionID = new List<Question>()
                { 
                    new Question()
                    {
                        QuestionDes = "Expand SD RAM.?",
                        Answer1 = "Synchronous Dynamic Random Access Memory.",
                        Answer2 = "It is used to store intermediate data and instructions",
                        Answer3 = "It decodes the instructions",
                        Answer4 = "It contains the instruction that is being executed",
                        Correct = 1
                        //ExaminationID = 1
                    }
                }
            };
            Examination e4 = new Examination()
            {
                Description = "Computer Science",
                CutOffMark = 40,
                QuestionID = new List<Question>()
                { 
                    new Question()
                    {
                        QuestionDes = "What is Instruction register?",
                        Answer1 = "Stores a copy of current instruction.",
                        Answer2 = "It is used to store intermediate data and instructions",
                        Answer3 = "It decodes the instructions",
                        Answer4 = "It contains the instruction that is being executed",
                        Correct = 1
                        //ExaminationID = 1
                    }
                }
            }; 
    
            User u1 = new User()
            {
    
                UserName = "dayan",
                Password = "dayan",
                Role = "Admin"
    
            };
            User u2 = new User()
            {
                UserName = "neranjan",
                Password = "neranjan",
                Role = "employee"
            };
    
            context.Examinations.Add(e1);
            context.Examinations.Add(e2);
            context.Examinations.Add(e3);
            context.Examinations.Add(e4);
            context.Users.Add(u1);
            context.Users.Add(u2);
            //context.SaveChanges();
            base.Seed(context);
    
        }
    }
    

    I'm working with MVC, so i found this file called 'Global.asax' in my MVC folder and i add this 'SetInitializer' to it. this is how it looked...

    public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
                AuthConfig.RegisterAuth();
                **Database.SetInitializer(new ContextSeeder());**
            }
        }
    

    Then i runned my home page. the. it automatically inserted my data objects into the DB... this is how my homepage looks like....

        @using (Html.BeginForm("Results", "Exam"))
    {
        <table>
            <tr>
                <td>
                    @grid.GetHtml(columns: new[]{
                            grid.Column("ID"),
                            grid.Column("QuestionDes"),
                            grid.Column("Answer1"),
                            grid.Column("Answer2"),
                            grid.Column("Answer3"),
                            grid.Column("Answer4")
                        })
                </td>
                <td>
                    @Html.DropDownList("Answer1", new SelectList(ViewBag.sel, "Value", "Text"), new { @id = "1" })      
                    @Html.DropDownList("Answer2", new SelectList(ViewBag.sel, "Value", "Text"), new { @id = "2" }) 
                    @Html.DropDownList("Answer3", new SelectList(ViewBag.sel, "Value", "Text"), new { @id = "3" }) 
                    @Html.DropDownList("Answer4", new SelectList(ViewBag.sel, "Value", "Text"), new { @id = "4" })             
    
                </td>
            </tr> 
        </table>      
        <input type="submit" value="Submit"/>
    
    }
    

    Controller:

    public ActionResult Examination()
            {
    IService ser = new Service();
            //taking all the list questions passed from the LoadQuestions_ToTheGridview() method
            List<Entities.Question> list = ser.LoadQuestions_ToTheGridview();
            ViewBag.qlist = list;
    
            List<Models.SelectedListItems> selList = new List<Models.SelectedListItems>();
            selList.Add(new Models.SelectedListItems { Text = "----Select----", Value = "0" });
            selList.Add(new Models.SelectedListItems { Text = "Answer 1", Value = "1" });
            selList.Add(new Models.SelectedListItems { Text = "Answer 2", Value = "2" });
            selList.Add(new Models.SelectedListItems { Text = "Answer 3", Value = "3" });
            selList.Add(new Models.SelectedListItems { Text = "Answer 4", Value = "4" });
    
            ViewBag.sel = selList;
    
    
            return View(list);
            }
    

    thank you!!!!