实体框架抛出异常 - 发生网络相关或特定实例错误

3
我已经按照MVC 3的教程做了以下事情:

创建了4个类和一个DBClass:
User [拥有] 一个 Website 列表 [拥有] 一个 Page 列表 [拥有] 一个 Comment 列表 [每个标记的单词都是自己的类]。
然后,我创建了一个名为UserDataBaseDB的类,如下所示:

public partial class UserDataBaseDB : DbContext
    {
        public DbSet<User> Users { get; set; }

        public UserDataBaseDB()
            : base(@"UserDataBaseDB")
        {
            if (this.Database.Exists())
            {
                try
                {
                    this.Database.CompatibleWithModel(false);
                }
                catch (InvalidOperationException)
                {
                    this.Database.Delete();
                }
            }

            if (!this.Database.Exists())
            {
                this.Database.Create();
                Seed();
            }
        }

        private void Seed()
        {
            var Mark = new User();
            Mark.ID = 0;
            Mark.MD5Pass = "4297f44b13955235245b2497399d7a93";
            Mark.UserName = "Admin";

            var Troll = new Comment();
            Troll.CommentData = "Fake!";
            Troll.Writer = Mark;

            var Site = new Website();
            Site.Name = "Admin Site";

            Site.Pages.ElementAt(0).Data = "Awesome website!";
            Site.Pages.ElementAt(0).Comments.Add(Troll);

            Mark.Websites.Add(Site);

            Users.Add(Mark);
        }
        public static UserDataBaseDB Create()
        {
            return new UserDataBaseDB();
        }
        public User FindUserByID(int id)
        {
            return (from item in this.Users
                    where item.ID == id
                    select item).SingleOrDefault();
        }

然后我添加了控制器(Controller)和视图(View),然后导航到"http://localhost:40636/Main",我看到了这条消息:
“在建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。未找到服务器或无法访问。请验证实例名称是否正确并且SQL Server已配置为允许远程连接。(提供程序: SQL Network Interfaces, 错误: 26 - 无法定位特定服务器/实例)”
Line 14:             : base(@"UserDataBaseDB")
Line 15:         {
Line 16:             **if (this.Database.Exists())**
Line 17:             {
Line 18:                 try

将标记线设为红色线。

我已经尝试重新安装Entity Framework,还尝试了EFCodeFirst,尝试创建自己的SqlDataBase并给它连接字符串,但都没有效果。

有人知道解决方案吗?谢谢!

PS:我正在使用Win7 64位机器上的VS Ultimate SP1。


你的连接字符串是什么?你的工作站能否连接到 SQL Server? - ysrb
1个回答

3
这很可能是连接字符串问题,但我看到您正在尝试在构造函数中种子信息并充分利用上下文,我强烈建议您不要这样做。您可以实现OnModelCreating方法并尝试在那里编写初始化代码,或者更好地在应用程序启动时进行。在构造函数中被卡住似乎不太对,因为此时初始化才刚开始。
在以下代码行上设置断点:
if (this.Database.Exists())
错误是否在该行之后立即发生?如果是,请三重检查连接字符串。您的代码在一个项目中还是分开的?请确保在根Web项目的web.config中检查连接字符串,而不是任何组件的app.config(如果您正好使用该设计)。
每次从Code-First等更改时,您是否更改了连接字符串?Code-First连接字符串以上下文类命名,非常简单:

<add name="UserDataBaseDB" connectionString="Data Source=|DataDirectory|test.sdf" providerName="System.Data.SqlServerCe.4.0" /%gt;

当然,这是使用SQLCe4。 SQL Server将是:

<add name="UserDataBaseDB" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=YourDbName;Integrated Security=True;Pooling=False" /%gt;

或者对于app_Data中的数据库:

<add name="UserDataBaseDB" providerName="System.Data.SqlClient" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\YourDatabase.mdf;User Instance=true" /%gt;


谢谢,那个起作用了。虽然我还有另一个从网站读取的问题,我会在另一个问题中发布。 - Mark Segal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接