C# ASP.NET MVC 3代码首先使用空数据库

C# ASP.NET MVC 3代码首先使用空数据库,c#,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc 3,Entity Framework,我是ASP.NET MVC的新手,但与RoR合作过很多次,因此我熟悉MVC模式 我对使用代码优先方法处理数据库部分的可能性很好奇。一位ASP.NET开发人员同事告诉我,可以创建一个空数据库,即没有表的数据库,并首先使用EF代码在该空数据库中创建表 Update-Database -script 对吗 我在任何地方都找不到关于这种方法的任何教程/文档。我遇到过一些代码优先的方法,这些方法从现有数据库和表开始,但不是没有表的现有数据库 我很想知道: 如果可能的话。 如果不是,下一个最接近的方法是什

我是ASP.NET MVC的新手,但与RoR合作过很多次,因此我熟悉MVC模式

我对使用代码优先方法处理数据库部分的可能性很好奇。一位ASP.NET开发人员同事告诉我,可以创建一个空数据库,即没有表的数据库,并首先使用EF代码在该空数据库中创建表

Update-Database -script
对吗

我在任何地方都找不到关于这种方法的任何教程/文档。我遇到过一些代码优先的方法,这些方法从现有数据库表开始,但不是没有表的现有数据库

我很想知道:

如果可能的话。 如果不是,下一个最接近的方法是什么

谢谢


谢谢

是的,这是可以设计的。这是官方教程

请参见“构建初始模型和数据库”一节


注意:如果您的数据库已经存在,您可以将dbcontext类命名为该数据库,或者在连接字符串中指定“初始目录”以匹配您的数据库。

是的,这可以通过设计实现。这是官方教程

Update-Database -script

请参见“构建初始模型和数据库”一节


注意:如果数据库已经存在,则可以将dbcontext类命名为该数据库,或者在连接字符串中指定“初始目录”以匹配数据库。

在最基本的级别上,创建一个类来表示表,一个上下文类(从dbcontext派生)然后在Package Manager控制台中执行命令以创建迁移/脚本和/或直接更新数据库模式(首先将其视为EF code的
rake db migrate

Update-Database -script
这将为您创建一个迁移类,该类表示自上次迁移以来对数据库所做的更改。如果这是第一个(假设您从一个空数据库开始),它还将生成一个名为“u MigrationHistory”的系统表,用于跟踪哪些迁移已应用于数据库

Update-Database -script
使用-script标志执行更新数据库将生成一个SQL脚本,您可以在需要时保存/签入到源代码管理。如果您希望只更新数据库本身而不使用脚本,只需去掉-script标记即可

确保web.config中有一个连接字符串,其名称与上下文类相同(“本例中为DatabaseContext”)。这可以指向现有数据库,但只能管理/跟踪对上下文类中定义的实体所做的更改。我发现有时在使用添加迁移和更新数据库命令时,需要显式定义上下文,如下所示:

Add-Migration "Description of your migration" -connectionstringname "DatabaseContext"

在最基本的级别上,您创建一个类来表示您的表,一个上下文类(从DbContext派生),然后在Package Manager控制台中执行命令来创建迁移/脚本和/或直接更新数据库模式(首先将其视为
rake db migrate
for EF code)

这将为您创建一个迁移类,该类表示自上次迁移以来对数据库所做的更改。如果这是第一个(假设您从一个空数据库开始),它还将生成一个名为“u MigrationHistory”的系统表,用于跟踪哪些迁移已应用于数据库

Update-Database -script
使用-script标志执行更新数据库将生成一个SQL脚本,您可以在需要时保存/签入到源代码管理。如果您希望只更新数据库本身而不使用脚本,只需去掉-script标记即可

确保web.config中有一个连接字符串,其名称与上下文类相同(“本例中为DatabaseContext”)。这可以指向现有数据库,但只能管理/跟踪对上下文类中定义的实体所做的更改。我发现有时在使用添加迁移和更新数据库命令时,需要显式定义上下文,如下所示:

Add-Migration "Description of your migration" -connectionstringname "DatabaseContext"

您可以简单地创建一个类似于表的类

 public class Person{
public Guid id {get;set;};
public string Name {get;set;};
}
然后可以添加ADO.NET数据实体模型类型codefirst空数据库 然后将该类添加到该数据库中

在db中添加一个ctor

static myDB(){
Database.setInitializer(new DropCreateDataBaseIfModelChanges<myDB>());
}


public virtual dbset<Person> People {get;set;};
static myDB(){
setInitializer(新的DropCreateDataBaseIfModelChanges());
}
公共虚拟数据库集人物{get;set;};

之后,您的数据库将被创建

您只需创建一个类似于表的类即可

 public class Person{
public Guid id {get;set;};
public string Name {get;set;};
}
然后可以添加ADO.NET数据实体模型类型codefirst空数据库 然后将该类添加到该数据库中

在db中添加一个ctor

static myDB(){
Database.setInitializer(new DropCreateDataBaseIfModelChanges<myDB>());
}


public virtual dbset<Person> People {get;set;};
static myDB(){
setInitializer(新的DropCreateDataBaseIfModelChanges());
}
公共虚拟数据库集人物{get;set;};

之后,您的数据库将被创建

您甚至不必提供空数据库。EF将(重新)生成一个。那么我应该删除当前数据库吗?您甚至不必提供空数据库。EF将(重新)生成一个。那么我应该删除当前数据库吗?谢谢Alex,但您引用的那一节显示了CodeFirst如何创建数据库和表。我已经有一个数据库了。代码片段:“运行您的应用程序,您将看到为您创建了一个MigrationCodeDemo.BlogContext数据库。”谢谢Alex,但您引用的那一节显示了CodeFirst如何创建数据库和表。我已经有一个数据库了。代码片段:“运行您的应用程序,您将看到为您创建了一个MigrationsCodeDemo.BlogContext数据库。”谢谢,Scott。还有一个问题:我刚刚运行了这些命令,看起来不错,但在数据库中没有看到新表。我应该看到新表吗?如果运行“更新数据库”时没有-script标志,那么应该看到数据库中的表。如果没有,请尝试-connectionstringname标志,以确保指向正确的连接(一个