【问题标题】:Is it possible to add two table's data in Seed method in Entity Framework(Code-first)?是否可以在实体框架(代码优先)的种子方法中添加两个表的数据?
【发布时间】:2015-02-24 03:59:04
【问题描述】:

在我的 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
                    }
                }
            }; 

我需要这种方法的目的是因为我使用的是代码优先实体框架 我需要确保当我删除数据库并再次创建数据库时,这些行应该写入这些表中。

你能告诉我如何解决这个问题吗... 谢谢!!

【问题讨论】:

  • 你为什么不能把它也放在你的种子方法中?

标签: entity-framework entity-framework-4 entity-framework-5 entity entity-framework-4.1


【解决方案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);
        }

谢谢!!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2012-03-08
    • 2018-12-02
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多