【问题标题】:.Net Visual Studio create SQL Server can't see DBContext class.Net Visual Studio 创建 SQL Server 看不到 DBContext 类
【发布时间】:2016-04-01 14:33:18
【问题描述】:

这是来自教程。我有两个模型,RestaurantRestaurantReview

Restaurant是这样的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace OdeToFood.Models
{
    public class Restaurant
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
        public ICollection<RestaurantReview> Reviews { get; set; }
    }
}

RestaurantReview是这样的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace OdeToFood.Models
{
    public class RestaurantReview
    {
        public int Id { get; set; }
        public int Rating { get; set; }
        public string Body { get; set; }
        public int RestaurantId { get; set; }
    }
}

现在我已经创建了 OdeToFoodDB 类:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace OdeToFood.Models
{
    public class OdeToFoodDB : DbContext
    {
        public DbSet<Restaurant> Restaurants { get; set; }
        public DbSet<RestaurantReview> Reviews { get; set; }
    }
}

现在我正在尝试创建一个 Microsoft SQL Server 数据库。我去了服务器资源管理器-> 添加连接并选择了 Microsoft SQL Server。根据教程,可能的数据库名称之一应该是OdeToFood.Models.OdeToFoodDB。但它不能作为选择:

当我尝试在其中输入 OdeToFood.Models.OdeToFoodDB 时,它会说

数据库 OdeToFood.Models.OdeToFoodDB 不存在或您无权查看它。

我正在使用 Microsoft Visual Studio 2013 和 Microsoft .NET framework 4.5.5

响应伊万的更新:

我在HomeController 中创建了一个_db,如下所示:

namespace OdeToFood.Controllers
{
    public class HomeController : Controller
    {
        OdeToFoodDB _db = new OdeToFoodDB();

        public ActionResult Index()
        {
            var model = _db.Restaurants.ToList();

            return View(model);
        }
}

更新 2:这是我的 web.config 的连接字符串部分:

<connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-OdeToFood-20160318150024;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-OdeToFood-20160318150024.mdf" 
         providerName="System.Data.SqlClient" />
</connectionStrings>

【问题讨论】:

  • 你是以管理员身份运行 VS 吗?
  • 你创建数据库了吗?好像您创建了一个模型。而你所做的是建立数据库连接,而不是创建数据库
  • @Pogrindis 好建议,但我刚刚尝试以管理员身份运行 VS,得到了相同的结果。
  • @Ian 我仍在学习如何做到这一点,但根据 Pluralsight 上的教程,只需创建一个扩展 DBContext 的类就可以告诉 Visual Studio 创建数据库。他在教程中以相同的方式执行此操作,并创建了数据库。
  • @jimboweb 你有推荐教程的链接吗?

标签: c# sql-server asp.net-mvc entity-framework visual-studio


【解决方案1】:

在您的视频中,connectionString 名称最初看起来像:

aspnet-OdeToFood-20121010102515

我在您的下拉列表中看到了类似的项目。话虽如此,要么您已经在您不知道的情况下创建了数据库(但没有您预期的名称 - 因为您从不更改连接字符串),或者您还没有t 创建了数据库,因为您还没有创建使用连接字符串的构造函数:

public class OdeToFoodDB : DbContext
{
    public OdeToFoodDB : base("name=DefaultConnection")
    {

    }

    public DbSet<Restaurant> Restaurants { get; set; }
    public DbSet<RestaurantReview> Reviews { get; set; }
}

自动创建数据库。

更新:

鉴于您的web.config,现在更改您的:

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-OdeToFood-20160318150024;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-OdeToFood-20160318150024.mdf" providerName="System.Data.SqlClient" />
  </connectionStrings>

进入:

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=OdeToFoodDB;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDB.mdf" providerName="System.Data.SqlClient" />
  </connectionStrings>

那么你应该会看到OdeToFoodDB

【讨论】:

  • 嗨伊恩,谢谢你的建议。我确实尝试按照您的建议添加构造函数,但数据库仍然不可用。也许我没有像您所说的那样更改连接字符串。如何更改连接字符串?
  • 在您的项目文件夹中打开您的 .config 文件(可能名称为 Web.config)。然后寻找&lt;connectionStrings&gt;。查看其中一个 &lt;add name=DefaultConnection;connectionString=... ,将 connectionString=...Initial Catalog 更改为您想要的名称 OleDbEtc 然后您应该会看到它。
  • 另外,最简单的方法是从 SQL 服务器创建数据库并根据需要命名...实际上我会这样。编辑:它应该看起来像:&lt;add name="DefaultConnection" connectionString="... 还要检查它的AttachDbFilename
  • 我已更新问题,以便您可以看到 Web.config 文件的连接字符串部分。我想我应该继续自己创建数据库并自己构建表;没有那么多领域。但我仍然想知道为什么 VS 没有做它应该做的事情。
  • @jimboweb 我更新了我的答案,另外,请使用连接字符串名称创建构造函数:public OleToFoodDB : base("name=DefaultConnection")
【解决方案2】:

服务器上不存在数据库。 尝试从 sql server 管理创建一个名为 OdeToFood.Models.OdeToFoodDB 的数据库。而不是连接到它。

【讨论】:

  • 谢谢,Ferhi,我当然可以自己创建数据库。但它没有数据,它只是一个空数据库。根据教程,我使用的数据库应该基于我创建的类创建两个表
【解决方案3】:

我没有显示数据库的原因是因为(LocalDb)v11.0 似乎不支持sql server。

检查你的模型是否加载:

如果您遇到以下错误,那么this other SO post会对您有所帮助!

无法打开数据库,因为它是 782 版本。此服务器 支持版本 706 及更早版本。不支持降级路径

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多