【发布时间】:2019-06-12 20:19:49
【问题描述】:
我按照本教程 https://www.freecodecamp.org/news/an-awesome-guide-on-how-to-build-restful-apis-with-asp-net-core-87b818123e28/ 进行操作,一切正常,但此示例 API 使用 InMemoryDatabase 选项。我想使用 SQL Server 数据库(我使用的是代码优先方法)。
我试图在 SQL Server Management Studio 中创建一个没有表的数据库,并在我的 Startup 类中使用带有以下代码的连接字符串,它正在工作并将数据保存到数据库中,但它没有出现在SQL Server 管理工作室。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<GameCollectionDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("DBGAMESCOLLECTION"));
// options.UseInMemoryDatabase("GAME_COLLECTION_DB");
});
services.AddScoped<IUsersRepository, UsersRepository>();
services.AddScoped<ICollectionsRepository, CollectionsRepository>();
services.AddScoped<IGamesRepository, GamesRepository>();
services.AddScoped<IUsersService, UsersService>();
services.AddScoped<ICollectionsService, CollectionsService>();
services.AddScoped<IGamesService, GamesService>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddAutoMapper();
}
我的appsettings.json 看起来像这样
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"DBGAMESCOLLECTION": "Server=(localdb)\\mssqllocaldb;Database=GAMES_COLLECTION_DB;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"AllowedHosts": "*"
}
我想要的只是让实体框架根据我声明的模型在我的本地机器上创建数据库,并且生成的数据库可在 SQL Server 中用于进行查询和存储过程。
(更新)
我想我应该更清楚。我使用代码优先方法创建了我的 REST API,因为我希望创建模型并在此基础上获取数据库文件或脚本。这是我第一次自己实现 EF,所以起初我在上下文中使用了 InMemoryDatabase 选项,但我知道这只是为了测试目的。在 API 按预期工作后,我继续使用真实数据库进行持久性。所以我把它添加到我的 Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<GameCollectionDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("DBGAMESCOLLECTION"));
//options.UseInMemoryDatabase("GAME_COLLECTION_DB");
});
}
我的 appsettings.json 就这样结束了。
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"ConnectionStrings": {
"DBGAMESCOLLECTION": "Server=(localdb)\\mssqllocaldb;Database=GAMES_COLLECTION_DB;Trusted_Connection=True;"
},
"AllowedHosts": "*"
}
到目前为止,数据库工作正常,并且在停止上下文后正在保存数据,但我想知道我的数据库是在哪里创建的,因为在 SSMS 中它没有显示在我的机器中。我终于发现,由于连接字符串,我正在使用另一个 sqlexpress 实例,当我连接到 SSMS 服务器名称中的“(LocalDb)\MSSQLLocalDB”引擎时,它就在那里。
所以我现在有了一个 sql server 数据库和一个连接字符串,这样我就可以同时工作了。那么我的问题是,这种配置在现实生活中将如何工作?我在 appsettings.json 中写的连接字符串是要创建数据库的地方吗?所以如果我放一个服务器IP它会在那里?
【问题讨论】:
-
那么,唯一的问题是localdb数据库没有出现在SSMS中?
-
有点,我更熟悉管理那里的数据库。我也想看看信息是如何存储的。
-
这可能看起来很奇怪,但我见过这样的项目,但我不知道是否只有在使用数据库优先方法时才有可能。我曾经在没有实体框架的情况下实现常规的asp mvc
-
实体框架正在使用连接字符串中指定的数据库。除此之外,无论您使用哪种方法,它仍然只是一个普通的 SQL Server Express LocalDB 数据库。显然,您已经可以从 SSMS 访问数据库(因为您已经在 SSMS 中创建了它)。另外,您说过数据正在保存到数据库中。因此,通过刷新 SSMS 中的表格,您应该能够看到数据。我不确定你的问题到底是什么......
-
我说它正在工作并保存数据,因为当我在 Visual Studio 中重新启动 api 时,我之前插入的数据会显示出来,但我无法从 ssms 访问。我在 ssms 中创建了一个与连接字符串中的名称相同的数据库,但它没有表或数据。我也尝试从项目文件夹中的 mdf 文件中附加它,但它们也不会打开
标签: c# asp.net sql-server entity-framework