Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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# LinqPad,使用多个数据上下文-DevForce_C#_Linq_Linqpad_Devforce - Fatal编程技术网

C# LinqPad,使用多个数据上下文-DevForce

C# LinqPad,使用多个数据上下文-DevForce,c#,linq,linqpad,devforce,C#,Linq,Linqpad,Devforce,我买了LINQPad的高级版本。我认为也可以使用DevForce模型执行跨数据库查询 有两种方法可以做到这一点。最简单的是拖放 方法:按住Ctrl键同时拖动其他数据库 从架构资源管理器到查询编辑器。访问这些 查询中的其他数据库,请使用database.table表示法, e、 北风。地区。采取(100)。您查询的数据库必须 驻留在同一服务器上 第二种方法是列出要创建的额外数据库 在“连接属性”对话框中进行查询。此对话框还允许您 从链接服务器中选择数据库。以下是如何继续: 添加新的LINQ到SQL

我买了LINQPad的高级版本。我认为也可以使用DevForce模型执行跨数据库查询

有两种方法可以做到这一点。最简单的是拖放 方法:按住Ctrl键同时拖动其他数据库 从架构资源管理器到查询编辑器。访问这些 查询中的其他数据库,请使用database.table表示法, e、 北风。地区。采取(100)。您查询的数据库必须 驻留在同一服务器上

第二种方法是列出要创建的额外数据库 在“连接属性”对话框中进行查询。此对话框还允许您 从链接服务器中选择数据库。以下是如何继续:

  • 添加新的LINQ到SQL连接
  • 选择“指定新数据库或现有数据库”,然后选择要查询的主数据库
  • 单击“包括其他数据库”复选框,然后选择要包括的额外数据库。您还可以从中选择数据库 此对话框中的链接服务器

  • 但显然没有办法,是吗?是否有此解决方案?

    跨数据库查询仅适用于标准SQL Server连接、同一服务器或链接服务器上的数据库。主要的基本原理是确保服务器端连接(否则,每次连接时都会将整个表拉回到客户机)

    我已经考虑过向LINQPad添加一个特性,以允许任意的跨数据库查询,因为有时即使在客户端连接的情况下,它也会很有用。然而,将其用于自定义数据上下文(如DevForce或entityframework)是非常棘手的,因此该特性最终被置于“太难的篮子”中。一个主要问题是处理命名空间/assembly/app.config冲突

    请记住,没有什么可以阻止您按F4键并添加对包含附加datacontext的程序集的引用。当然,您必须手动实例化第二个数据上下文,但这并不是什么大问题。您仍然可以获得自动完成,并且如果为其创建单独的连接,您仍然可以在树视图中看到其模式。从功能上讲,如果LINQPad支持多连接查询,那么不管怎样,这就是最终的结果


    LINQPad对SQL Server的跨数据库查询支持的特殊之处在于,它只需添加对另一个程序集的引用,即可实现其他程序集无法实现的功能,即通过利用服务器端联接实现高效的跨数据库查询。

    跨数据库查询仅适用于标准SQL Server连接,数据库位于同一服务器或链接服务器上。主要的基本原理是确保服务器端连接(否则,每次连接时都会将整个表拉回到客户机)

    我已经考虑过向LINQPad添加一个特性,以允许任意的跨数据库查询,因为有时即使在客户端连接的情况下,它也会很有用。然而,将其用于自定义数据上下文(如DevForce或entityframework)是非常棘手的,因此该特性最终被置于“太难的篮子”中。一个主要问题是处理命名空间/assembly/app.config冲突

    请记住,没有什么可以阻止您按F4键并添加对包含附加datacontext的程序集的引用。当然,您必须手动实例化第二个数据上下文,但这并不是什么大问题。您仍然可以获得自动完成,并且如果为其创建单独的连接,您仍然可以在树视图中看到其模式。从功能上讲,如果LINQPad支持多连接查询,那么不管怎样,这就是最终的结果


    LINQPad对SQL Server的跨数据库查询支持的特殊之处在于,它只需添加对另一个程序集的引用,就可以完成其他程序无法完成的任务,这是为了通过利用服务器端联接来实现高效的跨数据库查询。

    您可以根据需要实例化任意多个上下文,以分散SQL实例并执行伪跨数据库联接、复制数据等。注意,跨上下文的联接是在本地执行的,因此必须调用ToList()、ToArray(),etc在加入之前分别使用各自的数据源执行查询。换句话说,如果将DB1.TABLE1中的10行与DB2.TABLE2中的20行进行“内部”连接,则在Linq执行连接并返回相关/相交集(每个示例最多20行)之前,必须将这两个集(全部30行)拉入本地计算机上的内存中

    //在Linqpad连接下拉列表中未选择EF6上下文
    var remoteContext=newyourcontext();
    remoteContext.Database.Connection.ConnectionString=“服务器=[Server];数据库=”
    +“[DATABASE];Trusted_Connection=false;用户ID=[SQLAUTHUSERID];密码=”
    +“[SQLAUTHPASSWORD];Encrypt=True;”;
    remoteContext.Database.Connection.Open();
    var DB1=新存储库(remoteContext);
    //EF6到远程数据库的连接
    var remote=DB1.GetAll()
    .其中(x=>x.Id==123)
    //注意…取决于您可能获得的默认Linqpad连接
    //的“EntityWrapperWithoutRelationships”结果
    //包含复杂类型的结果。可以使用Select()投影
    //仅指定简单类型列的步骤
    .Select(x=>new{x.Col1、x.Col1等…)
    .采取(1)
    .ToList().Dump();//必须通过调用ToList()、ToArray()执行查询,
    //在加入之前
    //在Linqpad连接下拉列表中选择Linq到SQL默认连接
    表2.其中(x=>x.Id=123)
    .ToList()//必须通过调用ToList()、ToArray()来执行查询,
    //在加入之前
    .Join(remote,a=>a.d,b=>(short?)b.Id,(a,b)=>new{b.Col1,b.Col2,a.Col1})
    .Dump();
    localContext.Database.Connection.Close();
    localContext=null;
    
    您可以实例化任意多个
    //EF6 context not selected in Linqpad Connection dropdown
    var remoteContext = new YourContext();
    remoteContext.Database.Connection.ConnectionString = "Server=[SERVER];Database="
    + "[DATABASE];Trusted_Connection=false;User ID=[SQLAUTHUSERID];Password=" 
    + "[SQLAUTHPASSWORD];Encrypt=True;";
    remoteContext.Database.Connection.Open();
    var DB1 = new Repository(remoteContext);
    
    //EF6 connection to remote database
    var remote = DB1.GetAll<Table1>()
        .Where(x=>x.Id==123)
        //note...depending on the default Linqpad connection you may get 
        //"EntityWrapperWithoutRelationships" results for 
        //results that include a complex type.  you can use a Select() projection 
        //to specify only simple type columns
        .Select(x=>new { x.Col1, x.Col1, etc... })
        .Take(1)
        .ToList().Dump();  // you must execute query by calling ToList(), ToArray(),
                  // etc before joining
    
    
    //Linq-to-SQL default connection selected in Linqpad Connection dropdown
    Table2.Where(x=>x.Id = 123)
        .ToList() // you must execute query by calling ToList(), ToArray(),
                  // etc before joining
        .Join(remote, a=> a.d, b=> (short?)b.Id, (a,b)=>new{b.Col1, b.Col2, a.Col1})
        .Dump();
    
    localContext.Database.Connection.Close();
    localContext = null;