Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 带有代码的实体框架首先连接到数据库,即使我使用IQueryable_C#_Entity Framework_Ef Code First - Fatal编程技术网

C# 带有代码的实体框架首先连接到数据库,即使我使用IQueryable

C# 带有代码的实体框架首先连接到数据库,即使我使用IQueryable,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我正在尝试使用现有数据库创建实体框架代码优先场景。 问题是,当我运行程序时,它会尝试连接到数据库,即使我使用IQueryable。请阅读我在代码中的注释以了解更多详细信息: static void Main(string[] args) { using (SomeContext db = new SomeContext()) { // This one does not connects to database. // If I disable

我正在尝试使用现有数据库创建实体框架代码优先场景。 问题是,当我运行程序时,它会尝试连接到数据库,即使我使用
IQueryable
。请阅读我在代码中的注释以了解更多详细信息:

static void Main(string[] args)
{
    using (SomeContext db = new SomeContext())
    {
        // This one does not connects to database. 
        // If I disable my network connection this code will still be executed
        IQueryable<Activity> allActivitiesQuery = db.ActivitySet;

        // This one does connects to database. 
        // If I disable my network connection this query will throw exception
        IQueryable<Activity> filteredActivitiesQuery = db.ActivitySet
            .Where(activity => !string.IsNullOrEmpty(activity.FirstProperty));
    }

    //If I use same context again it will not connect to database
    using (SomeContext db = new SomeContext())
    {
        //Both statements will be executed even network connection is closed
        IQueryable<Activity> allActivitiesQuery = db.ActivitySet;
        IQueryable<Activity> filteredActivitiesQuery = db.ActivitySet
            .Where(activity => !string.IsNullOrEmpty(activity.FirstProperty));
    }
}
static void Main(字符串[]args)
{
使用(SomeContext db=new SomeContext())
{
//这个不连接到数据库。
//如果禁用网络连接,此代码仍将执行
IQueryable allActivitiesQuery=db.ActivitySet;
//这个连接到数据库。
//如果禁用网络连接,此查询将引发异常
IQueryable FilteredActiviesQuery=db.ActivitySet
.Where(activity=>!string.IsNullOrEmpty(activity.FirstProperty));
}
//若我再次使用相同的上下文,它将不会连接到数据库
使用(SomeContext db=new SomeContext())
{
//即使网络连接关闭,这两条语句也将执行
IQueryable allActivitiesQuery=db.ActivitySet;
IQueryable FilteredActiviesQuery=db.ActivitySet
.Where(activity=>!string.IsNullOrEmpty(activity.FirstProperty));
}
}
我如何防止这种行为?当我首先使用数据库并从数据库生成我的模型时,这并没有发生。 当我仅使用
IQueryable
时,如何防止对数据库的连接请求


其他详细信息:

如果您需要它们,以下是我的型号:

//model
public class Activity
{
    public string FirstProperty { get; set; }
    public string SecondProperty { get; set; }
    public string ThirdProperty { get; set; }
}

//mapping details
public class ActivityMap : EntityTypeConfiguration<Activity>
{
    public ActivityMap()
    {
        //Primary key
        ..........

        //Properties
        .............

        //Table & column mappings 
        .......................
    }
}

//Context details
public class SomeContext : DbContext
{
    static SomeContext()
    {
        Database.SetInitializer<SomeContext>(null);
    }

    public SomeContext()
        : base("Name=SomeContext")
    {
        this.Configuration.LazyLoadingEnabled = false;
        this.Configuration.AutoDetectChangesEnabled = false;
    }

    public DbSet<Activity> ActivitySet { get; set; }

    // Add mapping configuration for code first POCO objects
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ActivityMap());
    }
}
//模型
公共课堂活动
{
公共字符串FirstProperty{get;set;}
公共字符串SecondProperty{get;set;}
公共字符串ThirdProperty{get;set;}
}
//映射细节
公共类活动映射:EntityTypeConfiguration
{
公共活动地图()
{
//主键
..........
//性质
.............
//表和列映射
.......................
}
}
//上下文详细信息
公共类SomeContext:DbContext
{
静态SomeContext()
{
Database.SetInitializer(null);
}
公共上下文()
:base(“Name=SomeContext”)
{
this.Configuration.LazyLoadingEnabled=false;
this.Configuration.AutoDetectChangesEnabled=false;
}
公共数据库集活动集{get;set;}
//为代码优先的POCO对象添加映射配置
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
添加(新的ActivityMap());
}
}

除了您的问题外:为什么要在没有工作数据库连接的情况下使用EF/
IQueryable
?关于您的问题:EF当时试图执行什么命令?@ChrFin由于性能问题,我不需要它。我会亲自检查的。是否每次都要检查,或者每次都要检查一次?它没有执行任何操作。正在生成查询以获取筛选数据。您遇到了什么异常?@ChrFin“试图对无法访问的网络执行套接字操作”。请阅读我在代码中的注释以了解更多详细信息。除非您尝试枚举数据库(用于循环、ToArray等),否则IQueryable不会连接到数据库。如果它真的试图访问数据库,我猜会有一个被忽略的代码试图实现IQueryable。尝试启用Intellitrace并查看正在执行的sql命令,然后将其返回到启动它的代码。