Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架中的一对多关系导致异常_C#_Entity Framework - Fatal编程技术网

C# 实体框架中的一对多关系导致异常

C# 实体框架中的一对多关系导致异常,c#,entity-framework,C#,Entity Framework,为了向自己介绍实体框架,我创建了一个与之配合使用的控制台应用程序 有两个实体:ClassA和ClassB。它们之间存在一对多的关系。一个ClassA实例可以有多个ClassB实例。ClassB的一个实例有0或1个ClassA实例 这些类的代码是: public class ClassA { public virtual int Id {get; set;} public virtual string Name {get; set;} public virtual ICol

为了向自己介绍实体框架,我创建了一个与之配合使用的控制台应用程序

有两个实体:ClassAClassB。它们之间存在一对多的关系。一个ClassA实例可以有多个ClassB实例。ClassB的一个实例有0或1个ClassA实例

这些类的代码是:

public class ClassA {
    public virtual int Id {get; set;}
    public virtual string Name {get; set;}
    public virtual ICollection<ClassB> ClassBs {get; set;}
}

public class ClassB {
    public virtual int Id {get; set;}
    public virtual string Name {get; set;}
    public virtual ClassA ClassA {get; set;}
}
当Main方法中的第二个foreach循环启动时,将引发以下异常:

System.Data.EntityCommandExecutionException was unhandled
  Message=An error occurred while executing the command definition. See the inner exception for details.
  Source=System.Data.Entity
  InnerException: System.InvalidOperationException
       Message=There is already an open DataReader associated with this Command which must be closed first.
       Source=System.Data
       StackTrace:
            at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)
            at System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command)
            at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
            at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
            at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
            at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
            at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
            at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
            at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
似乎
ClassA
中的
ClassBs
属性未正确加载。然而,我确实在上下文中指定了
ClassA
有许多
ClassB

数据库连接似乎很好,因为ClassA的第一个实例显示在控制台上。我还可以访问VisualStudio中的数据库,查看初始值设定项中生成的数据

我使用了开始使用这个控制台应用程序


您知道出了什么问题吗?

您需要将连接字符串中的MultipleActiveResultSet设置为true


MultipleActiveResultSets=true

您需要将连接字符串中的MultipleActiveResultSet设置为true


MultipleActiveResultSets=true

问题可能与构建模型的方式无关-更可能与连接上是否启用了
MultipleActiveResultSets
有关。请参见

问题可能与模型的构建方式无关-更可能与您是否在连接上启用了
MultipleActiveResultSets
有关。请参见

在创建db.Configuration.LazyLoadingEnabled=true的db上下文后,尝试将延迟加载设置为true;在创建db.Configuration.LazyLoadingEnabled=true的db上下文后,尝试将延迟加载设置为true+我比我快:)。然而,我想知道这个问题是否与我在答案中找到的问题相同。几乎是的,这里有很多关于这个主题的话题@SO.+1比我先说:)。然而,我想知道这个问题是否符合我在答案中找到的问题的副本。几乎是的,这里有很多关于这个主题的主题@SO。
    static void Main(string[] args) {
        Database.SetInitializer(new Initializer());

        Context db = new Context();

        foreach (var classA in db.ClassAs) {
            Console.WriteLine(classA.Name);
            foreach (var classB in classA.ClassBs)
                Console.WriteLine("\t" + classB.Name);
        }

        Console.Write("\nFIN");
        Console.ReadKey();
    }
System.Data.EntityCommandExecutionException was unhandled
  Message=An error occurred while executing the command definition. See the inner exception for details.
  Source=System.Data.Entity
  InnerException: System.InvalidOperationException
       Message=There is already an open DataReader associated with this Command which must be closed first.
       Source=System.Data
       StackTrace:
            at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)
            at System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command)
            at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
            at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
            at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
            at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
            at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
            at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
            at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)