簡體   English   中英

是否可以在Entity Framework(代碼優先)的Seed方法中添加兩個表的數據?

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

在我的DataLayer中,我有以下“種子”方法:

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);    
        }

我的用戶表如下所示:

因此,現在我需要向此種子方法中添加更多表數據,如下所示:

         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
                    }
                }
            }; 

我需要這種方法起作用的目的是因為我使用的是代碼優先實體框架,因此我需要確保在刪除數據庫並再次創建數據庫時,這些行應寫入這些表中。

你能給我一個解決這個問題的想法嗎?謝謝!

這就是我解決的方法。

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);

    }
}

我正在使用MVC,因此我在MVC文件夾中找到了名為“ Global.asax”的文件,並向其中添加了“ SetInitializer”。 這就是它的樣子...

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());**
        }
    }

然后我運行了我的主頁。 的。 它會自動將我的數據對象插入數據庫...這就是我的主頁。

    @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"/>

}

控制器:

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);
        }

謝謝!!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM