Контекст не может использоваться во время создания модели
В моем приложении появляется следующая ошибка:
Контекст не может использоваться во время создания модели.
Я не уверен, что это значит. Я сделал все как обычно, и обычно это работает, но для этого он не является. Ниже мой код:
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>
Ответы
Ответ 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 разрешил проблему.