当前位置: 首页 > 面试题库 >

实体框架引发异常-发生了与网络相关或特定于实例的错误

赵献
2023-03-14
问题内容

我遵循了MVC 3中的教程,并执行了以下操作:

制作了4个类和一个DBClass:
User[有一个] Websites的列表[有一个] Pages的列表[有一个] Comments的列表[每个标记的单词都是其自己的类]。

然后,我制作了一个这样的类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();
        }

然后,我添加了ControllerView,并导航至http://localhost:40636/Main,然后看到了以下消息:

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。验证实例名称正确,并且已将SQL
Server配置为允许远程连接。(提供者:SQL网络接口,错误: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。


问题答案:

这可能是一个连接字符串问题,但是我确实看到您正在尝试播种信息并在构造函数中完全使用上下文,我强烈建议您不要这样做。您可以实现OnModelCreating方法并在那里尝试您的初始化代码,甚至可以在应用程序启动时更好。似乎只是因为此时才开始初始化而被卡在构造函数中似乎并不对。

在上设置断点

 如果(this.Database.Exists())

该行之后是否立即发生错误?如果是这样,请三遍检查您的连接字符串。您是否将代码包含在一个项目中,或者细分了?如果您恰好正在使用该设计,请确保检查的是根Web项目的web.config中的连接字符串,而不是任何组件的app.config中的连接字符串。

每次从代码优先更改等等时,是否都更改了连接字符串?代码优先的连接字符串是根据上下文类命名的,很简单:

<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;


 类似资料:
  • 尝试连接到SQL Server时出现以下错误: 无法连接到108.163.224.173。

  • 问题内容: 我使用实体框架访问我​​的SQL数据。我在数据库模式中有一些约束,我想知道如何处理由这些约束引起的异常。 例如,当两个用户尝试同时向数据库添加(几乎)相同的实体时,出现以下异常。 如何正确捕获此特定异常? 肮脏的解决方案: 现在,尽管这种方法行之有效,但它也有一些缺点: 没有类型安全性:该代码取决于包含唯一列名称的异常消息。 对SqlCLient类的依赖(抽象中断) 您知道更好的解决方

  • 问题内容: 我想知道人们对通过LINQ-to-SQL支持实体框架的决定有何想法?我有一个我最初使用LINQ-to- SQL开发的应用程序。我发现它是我们应用的理想解决方案。 在尝试移植到Entity Framework时,我感到很惊讶。恕我直言,甚至还没有准备好黄金时间。没有延迟加载,没有POCO,对继承的可怕依赖。我发现它在我的情况下基本上不可用,而是决定坚持使用LINQ- to-SQL,直到以

  • 问题内容: 我需要一种使用实体框架LINQ区分SQL异常的方法,例如,当我从DbUpdateException获得的所有信息都是大量嵌套的内部异常和无用的长错误消息时,如何区分前面的关键约束违例或唯一约束违例?是否有任何较低级别的例外,我可以在其中执行“ Catch FKException”之类的操作;捕获“ uniqueException”或类似的东西。 问题答案: 正在使用sql错误代码…

  • “异常信息” 在WebDriver.dll中发生类型为“System.InvalidOperationException”的未处理异常 附加信息:没有这样的驱动程序(NoSuchDriver) OpenQa.Selenium.edge.EdgedRiver..ctor(字符串edgeDriverDirectory,EdgeOptions选项) ConsoleApplication.Program.

  • 我目前正在使用最新版本的实体框架进行一个项目,我遇到了一个似乎无法解决的问题。 当涉及到更新现有对象时,我可以很容易地更新对象属性,直到涉及到引用另一个类的属性为止。 在下面的示例中,我有一个名为Foo的类,它存储各种属性,其中2个是其他类的实例 当我使用下面的Edit()方法时,我传入了我想要更新的对象,并且我可以设法使名称正确更新,但是我还没有找到一种方法来更改子对象的属性。例如,如果子对象的