在创建模型时不能使用上下文

Cal*_*ass 25 c# entity-framework

在我的应用程序中,我收到以下错误:

在创建模型时不能使用上下文.

我不确定这意味着什么.我做了一切正常,通常它的工作原理,但对于这一个,它不是.以下是我的代码:

App.config中:

 <connectionStrings>
    <add name="DatabaseContext" connectionString="Data Source=./SQLEXPRESS;Initial Catalog=ProjectCode;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
 </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

Products.cs:

class Products
{
    public int ProductID { get; set; }
    public string ProductName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

DatabaseContext.cs:

class DatabaseContext : DbContext
{
    public DbSet<Products> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

这条线是失败的 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>
Run Code Online (Sandbox Code Playgroud)

mjb*_*es7 16

在您的连接字符串下的App.Config文件中,您有一个正斜杠(./SQLEXPRESS).将其更改为反斜杠.\ SQLEXPRESS如下:

<add name="DatabaseContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=ProjectCode;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

  • 这有什么用? (20认同)

ntz*_*lis 15

我过去经历过这个问题,通常是因为没有使用最新版本+引用问题.

尝试从NuGet获取所有项目的最新EF版本,看看错误是否消失:http:
//blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-released的.aspx

更新
此错误的另一个原因可能是,当您第一次创建上下文并因此导致创建模型时,您将在单独的线程上创建另一个上下文.在模型创建完成后,您必须等待创建其他上下文实例.

  • @BiffBaffBoff此错误的另一个原因是多线程.您是从多个线程访问上下文?因为模型是在第一次实例化`DatabaseContext`时创建的,当你尝试创建`DatabaseContext`的另一个实例时,你也会收到这个错误,你必须等待模型创建准备好 (9认同)

小智 9

我能够通过添加来解决这个问题

MultipleActiveResultSets=true
Run Code Online (Sandbox Code Playgroud)

到我的EF连接字符串.

我通过添加这个多线程连接参数来修复它.

  • 这是一个糟糕的建议.MARS是隐藏潜在问题的解决方法. (2认同)