0

我想用 EF 创建一个新的 MVC 项目以使用数据库优先方法。

因此,我使用创建默认帐户和管理用户模型、控制器和视图的向导在 Visual Studio 2015 中创建了一个新的 MVC 5.2.3 项目。

连接字符串是

Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-MyProject-20161112112119.mdf;Initial Catalog=aspnet-MyProject-20161112112119;Integrated Security=True" providerName="System.Data.SqlClient

我在这里有几个问题:

  1. 我的项目文件夹中没有 mdf 文件App_Data,所以我不知道数据库到底去了哪里。

  2. 我猜该应用程序默认使用代码优先方法,所以显然我想更改它。一个想法是从设置时创建的内部项目 db 中复制表并将它们添加到我将用于 db first 方法的新数据库中。但我找不到现有的应用程序数据库(见第 1 点)。

  3. 我可以通过 Management Studio 连接到上面 ( ) 中的 connstring 中使用的服务器,(LocalDb)\MSSQLLocalDB但它根本没有数据库,甚至没有 conn 字符串中提到的数据库。并且该文件不在App_Data文件夹中

  4. MyProjectDb因此,我使用 Sql Server Management Studio在我的服务器中创建了一个全新的数据库localhost,旨在将其用于 db first 方法。

  5. 我在我的解决方案中创建了一个新项目MyProject.Database来使用新创建的数据库MyProjectDb

  6. 我检查并可以看到MyProject.Database项目属性中的数据库字符串具有 connstring 数据源(LocalDb)/ProjectsV13而不是localhost. 问题是为什么这样奇怪的来源而不是我的localhost?以及如何强制新的数据库项目在localhost服务器内创建数据库?

  7. 接下来,我修改了数据库项目(调试选项卡)的属性,以在连接字符串中用作数据源和我创建localhost的新数据库。MyProjectDb

  8. 现在我右键单击我的数据库项目MyProject.Database:添加 > 新项目 > 表。我创建了表格。

  9. 我现在可以在Projects-MyProject文件夹下的 SQL Server 对象资源管理器中看到数据库,也可以在 SQL Server Management Studio中看到MyProjectDb我在服务器下创建的数据库。localhost前者有我创建的表格,后者没有它在表格下(我当然刷新了表格)。这很奇怪,我很困惑它们实际上是相同的数据库还是以某种方式 VS 复制了数据库而不是使用我创建的数据库?

  10. 我在解决方案资源管理器中右键单击我的 Web 项目:添加 > 新项目 > 数据 > ADO.NET 实体数据模型,我给出名称,在下一个屏幕上我正在选择EF Designer from database选项。我单击下一步并进入我可以创建的屏幕New connection。我点击了这个,我可以从列表中选择的唯一服务器是NICKO-PC服务器。(请记住:我在 VS 中创建的 db 项目默认为(LocalDb)?ProjectsV13服务器)如​​果我尝试插入localhost或其他任何它确实更改回的内容,但我想当我扩展可用数据库时NICKO-PC它与服务器 cos 相同,我的数据库在列表中。所以我选择它并下一步。localhostMyProjectDb

  11. 我得到Choose Your Database Objects And Settings屏幕。现在我看不到我使用我的MyProject.Database项目创建的表。没有表可以选择更精确。所以很明显我不能创建任何数据库实体在我的应用程序中使用。

我被困住了。

我希望我对事件的描述不会令人困惑。

任何聪明的人都可以帮我做我想做的事吗?

  1. 我不知道为什么 web 项目在一些奇怪的(LocalDb)\MSSQLLocalDB服务器上使用 db 文件,而数据库项目在下面创建它(LocalDb)/ProjectsV13

  2. 如何创建自己的新数据库并将其用于 Web 应用程序和数据库项目,然后基于 db first 方法创建实体?

  3. 如何在数据实体向导中获取表和其他对象我想在我的应用程序中创建模型实体?

这基本上是我需要的。

请让我知道您是如何使用 Db First 方法创建项目的,因为我无法使用 VS 工作室向导。

谢谢

* 编辑 *

我的 DbContext 类相当简单,由我与用户模型一起安装的 MVC 项目创建:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

它指向默认的 conn 字符串,您可以看到我更改为连接到我新创建的 db MyProjectDb

4

1 回答 1

0

一旦您实际运行该站点遇到需要访问数据库的内容。实体框架应该创建数据库。我认为您可能只是过早地偏离了道路。

无论如何,是的,默认值将是代码优先,或者可能更合适:默认值将是创建一个新数据库。旧的“模型优先”和“数据库优先”方法已被弃用,虽然您现在仍然可以使用它们但不建议这样做,尤其是在构建需要长期支持的新应用程序时。也就是说,尽管名称如此,“代码优先”实际上可以与现有数据库一起使用或创建新数据库。您只需要稍微更改上下文即可使用现有数据库:

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext() : base("ConnectionStringName")
    {
        Database.SetInitializer<ApplicationDbContext>(null);
    }

    ...
}

然后,编辑您的 Web.config 并将连接字符串添加到您要连接到的现有数据库。确保您在此处提供的名称与上面代码中的“ConnectionStringName”位置相匹配。

于 2016-11-18T14:57:37.220 回答