Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 当需要对模型进行更改时,EF首先编码,有没有办法不删除DB?_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 当需要对模型进行更改时,EF首先编码,有没有办法不删除DB?

Entity framework 当需要对模型进行更改时,EF首先编码,有没有办法不删除DB?,entity-framework,ef-code-first,Entity Framework,Ef Code First,我试图先掌握代码,到目前为止,每次对模型进行更改时,我都需要删除并重新创建数据库。数据库中当前的数据是什么?我只是觉得我每次都要这么做很烦人,而且不是一个好的web方法,除非你100%确定你永远不必做任何更改,比如在表中添加一个新列。是否有其他方法可以防止这种情况发生?默认情况下,数据库初始值设定项设置为DropCreateDatabaseIfModelChanges。可以将数据库初始值设定项设置为null,以避免重新创建 Database.SetInitializer<YourConte

我试图先掌握代码,到目前为止,每次对模型进行更改时,我都需要删除并重新创建数据库。数据库中当前的数据是什么?我只是觉得我每次都要这么做很烦人,而且不是一个好的web方法,除非你100%确定你永远不必做任何更改,比如在表中添加一个新列。是否有其他方法可以防止这种情况发生?

默认情况下,数据库初始值设定项设置为DropCreateDatabaseIfModelChanges。可以将数据库初始值设定项设置为null,以避免重新创建

Database.SetInitializer<YourContext>(null);
Database.SetInitializer(null);

另一个选项是用来更新数据库而不重新创建它。

< P>如果您试图在开发期间维护测试数据,请考虑使用IDATABASE初始化器的种子方法(即,数据库初始化器)。种子方法在初始化期间(应用任何模型更改后)被调用,并将填充您指定的任何测试数据

指定要使用哪个初始值设定项的最佳方法是在global.asax.cs文件中

下面是一个例子:

[Global.asax.cs]

Database.SetInitializer<MyApplicationDbContext>(new MyApplicationDbContextInitializer());
public class MyApplicationDbContextInitializer : DropCreateDatabaseAlways<MyApplicationDbContext>
{
    protected override void Seed(TitleDB context)
    {

        context.Products.Add(new Product { Id = 1, Name = "Foobar XL" });
        context.Products.Add(new Product { Id = 2, Name = "Foobar LG" });
        context.Products.Add(new Product { Id = 3, Name = "Foobar MD" });

        context.SaveChanges();

        base.Seed(context);
    }
}
Database.SetInitializer(新的myapplicationdbcontdeInitializer());
[myapplicationdbcontdeInitializer.cs]

Database.SetInitializer<MyApplicationDbContext>(new MyApplicationDbContextInitializer());
public class MyApplicationDbContextInitializer : DropCreateDatabaseAlways<MyApplicationDbContext>
{
    protected override void Seed(TitleDB context)
    {

        context.Products.Add(new Product { Id = 1, Name = "Foobar XL" });
        context.Products.Add(new Product { Id = 2, Name = "Foobar LG" });
        context.Products.Add(new Product { Id = 3, Name = "Foobar MD" });

        context.SaveChanges();

        base.Seed(context);
    }
}
公共类MyApplicationDbContextInitializer:DropCreateDatabaseAlways
{
受保护的覆盖无效种子(标题B上下文)
{
Add(新产品{Id=1,Name=“Foobar XL”});
Add(新产品{Id=2,Name=“Foobar LG”});
Add(新产品{Id=3,Name=“Foobar MD”});
SaveChanges();
种子(上下文);
}
}

对不起,我应该在哪里添加此行?另外,如果我向模型中添加一个新属性,它会将其添加到数据库中并维护其中的当前数据吗?只要尝试一下,它就可以完美地工作。这正是我需要的。谢谢。我在这里提供的答案也可能对您早期的EF-CF旅程有所帮助。