Подтвердить что ты не робот

Контекст не может использоваться во время создания модели

В моем приложении появляется следующая ошибка:

Контекст не может использоваться во время создания модели.

Я не уверен, что это значит. Я сделал все как обычно, и обычно это работает, но для этого он не является. Ниже мой код:

App.config:

 <connectionStrings>
    <add name="DatabaseContext" connectionString="Data Source=./SQLEXPRESS;Initial Catalog=ProjectCode;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
 </connectionStrings>

Products.cs:

class Products
{
    public int ProductID { get; set; }
    public string ProductName { get; set; }
}

DatabaseContext.cs:

class DatabaseContext : DbContext
{
    public DbSet<Products> Products { get; set; }
}

Program.cs:

DatabaseContext context = new DatabaseContext();

try
{
   var products = context.Products.ToList();

   foreach (var item in products)
   {
      Console.WriteLine(item.ProductID + " : " + item.ProductName);
   }
      Console.ReadLine();
}

Линия не работает: var products = context.Products.ToList();

Любые идеи, что может быть причиной этого? Я установил 2 продукта в моей базе данных, поэтому он должен выводить их.

ИЗМЕНИТЬ

Вот мой весь файл App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <connectionStrings>
    <add name="DatabaseContext" connectionString="Data Source=./SQLEXPRESS;Initial Catalog=ProjectCode;Integrated Security=SSPI;MultipleActiveResultSets=true" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
</configuration>
4b9b3361

Ответ 1

В вашем файле App.Config в разделе connectionstrings у вас была косая черта (./SQLEXPRESS). Измените это на обратную косую черту. \SQLEXPRESS вот так:

<add name="DatabaseContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=ProjectCode;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />

Ответ 2

В прошлом я столкнулся с этой проблемой, и обычно ей не приходилось использовать последнюю версию + ссылку.

Попробуйте получить новую версию EF от NuGet для всех ваших проектов и посмотрите, не исчезла ли ошибка:
http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-released.aspx

UPDATE
Другой причиной этой ошибки может быть то, что при создании контекста в первый раз и, следовательно, при создании модели вы создаете другой контекст в отдельном потоке. Вам придется подождать, пока будут созданы другие экземпляры контекста после завершения создания модели.

Ответ 3

Мне удалось решить эту проблему, добавив

MultipleActiveResultSets=true

для моей строки подключения EF.

Я исправил его, добавив этот параметр подключения нескольких потоков.

Ответ 4

У меня тоже была эта ошибка, но я смог ее решить, объявив локальный контекст переменной внутри каждого потока, а не используя тот, который я объявил глобально.

    Parallel.ForEach(myList, l=>
    {
        MyContext _db = new MyContext();
        // do some stuff....
        _db.Model.Add(....);
        _db.SaveChanges();

    });

Убедитесь, что вы также установили в вашей строке соединения MultipleActiveResultSets = true, как описано выше.

Ответ 5

Я знаю, что это старый билет, но я также могу помочь другим людям с той же проблемой. В моем случае я не загружал контекст в строку подключения в файле app.config:

например.

<add name="SalesContext" connectionString="" providerName="System.Data.SqlClient" />

Это должно работать.

Привет.

Ответ 6

В моем случае я использовал Code First, и я забыл обновить базу данных для последних изменений. Контекст и база данных должны быть одинаковыми. Если нет, введите в диспетчере пакетов следующий код:

Update-Database

Ответ 7

Решается следующим образом:

У меня была такая же проблема в моем приложении и разрешена с использованием ниже.

  • Проверьте имена моделей и имена таблиц, и они должны быть сопоставлены.

  • Названия типов данных и столбцов, используемые в модели, и имя столбца таблицы базы данных/тип данных должны быть сопоставлены.

  • используйте приведенный ниже код в классе Context

    Public class MVCRepositoryContext : DbContext 
    {
        static MVCRepositoryContext()
        {
            Database.SetInitializer < mvcrepositorycontext > (null);
        }
    
        public MVCRepositoryContext():base("MVCRepositoryContext"){ }
    
        public virtual DbSet<customer> Customers { get; set; }
    
        public virtual DbSet<book> Books { get; set; }
    
        public virtual DbSet<author> Authors { get; set; }
    }
    

Ответ 8

Добавить конструктор DatabaseContext с именем каталога базы данных.

public class DatabaseContext : DbContext {
    public DbSet<Products> Products { get; set; }

    public DatabaseContext() : base("ProjectCode") {}
}

Измените конфигурацию entityframework в app.config следующим образом.

<parameter value="Data Source=./SQLEXPRESS;Initial Catalog=ProjectCode;Integrated Security=SSPI;MultipleActiveResultSets=true" />

Добавить класс аннотаций к продукту. Убедитесь, что в вашей базе данных есть таблица "Продукты" с буксирными полями "ProductId" и "ProductName".

class Products {
    [Key]
    public int ProductID { get; set; }
    public string ProductName { get; set; }
}

Если все еще ошибка, попробуйте изменить целевую структуру проекта для использования .net framework 4.0.

Ответ 9

У меня была такая же проблема и я решил ее использовать с помощью следующего кода:

Database.SetInitializer<EntitiesName>(null);

Ответ 10

У меня была такая же проблема. Я проверил строку подключения и убедился, что SQL Server Service работает для решения этой проблемы.

Ответ 11

Сегодня я столкнулся с такой же проблемой.
В моем случае перезапуск Visual Studio разрешил проблему.