Entity Framework выдает исключение - произошла ошибка, связанная с сетью или экземпляром - PullRequest
3 голосов
/ 16 октября 2011

Я следовал руководству по 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, ошибка: 26 - ошибка при поиске сервера / указан экземпляр)

Line 14:             : base(@"UserDataBaseDB")
Line 15:         {
Line 16:             **if (this.Database.Exists())**
Line 17:             {
Line 18:                 try

Разрешение отмеченной линии быть красной линией.

Я попытался переустановить Entity Framework, также пробовал EFCodeFirst, попытался создать собственный SqlDataBase и присвоить ему строку подключения, но ничего не помогло.

Кто-нибудь знает, в чем решение? Спасибо!

PS: я использую VS Ultimate SP1 на 64-битной машине Win7.

1 Ответ

3 голосов
/ 16 октября 2011

Вероятно, это проблема строки соединения, однако я вижу, что вы пытаетесь заполнить информацию и полностью использовать контекст в конструкторе, что я настоятельно рекомендую вам не делать.Вы можете реализовать метод OnModelCreating и попробовать там свой код инициализации или, что еще лучше, при запуске приложения.Просто кажется неправильным застрять в конструкторе, поскольку инициализация только начинается в этой точке.

Установить точку останова на

 if (this.Database.Exists())

Произошла ли ошибка сразу после этой строки?Если это так, трижды проверьте строку подключения.У вас есть код в одном проекте, или выломаны?Убедитесь, что вы проверяете строку подключения в 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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...