我想使用 LINQ,我认为“C# 交互式”窗口是一个好的、快速的做法。我的问题是我不知道如何访问我的“打开”的数据连接。数据库或表的名称未被识别。
我想使用 LINQ,我认为“C# 交互式”窗口是一个好的、快速的做法。我的问题是我不知道如何访问我的“打开”的数据连接。数据库或表的名称未被识别。
是的,您可以在解决方案资源管理器中右键单击主项目,然后单击使用项目初始化交互。这将为您构建项目并将所有dll导入交互窗口。然后,您就可以开始编写代码了!
例如,如果使用实体框架,您需要启动您的DbContext
。输入类似以下的内容...
> var context = new My.Namespace.MyDataContext("blah blah blah");
在“blah blah blah”处,您需要添加连接字符串。交互式控制台不知道您的.config文件,因此您需要提供连接字符串。
注意:要能够执行此操作,请确保数据上下文具有"nameOrConnectionString"构造函数重载。
现在,您已经拥有上下文了,就像通常查询上下文一样简单...
> context.Users.Where(u => u.IsActive).Select(u => u).ToList()
重要提示
请注意,我在查询末尾没有加上分号 (;)。这很重要,因为它告诉控制台输出查询/命令/代码行的值。如果您忘记了添加分号,将不会发生任何事情。
我通过创建一个类库来使这个工作正常,该类库打开了一个EF数据模型的连接,将DLL导入到C#交互窗口中,并对数据模型执行Linq语句。
首先,创建类库,添加EF数据模型,并修改你的DbContext (entities)类以使用带有连接字符串的构造函数。你需要这样做才能从C#交互窗口中使用此库,因为如果不这样做,交互窗口将查找一个包含连接字符串的app.config文件。
public partial class YourDBEntities : DbContext
{
public YourDBEntities(string connectionString)
: base(connectionString)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
....
}
如果你的类库中,添加一个包含静态方法以获取数据上下文的类:
public class AccessorClass
{
public static YourDBEntities GetDataContext()
{
return new YourDBEntities("metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=\";data source=xxxxxxx;initial catalog=xxxxxxx;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework\";");
}
}
> #r "C:\Path...\bin\Debug\YourClassLibrary.dll"
> using YourClassLibrary;
> using (var ctx = AccessorClass.GetDataContext())
. {
. Console.Write(ctx.Orders.Where(c => c.ProjectID == 309).Count().ToString());
. }
我提出的解决方案可能并不完全符合您的要求,但我认为它会帮助您找出您需要的内容。我做类似的事情的一种方式是创建一个DA库,并在C#交互窗口
中使用它。以下是样本:
我将创建一个类库项目,MyProject.MyDA:
namespace MyDa
{
public class CustomerDa
{
public DataTable LoadData(string sqlCommandText = "")
{
//do your try catch finally and all the good stuff
var connString = @"Data Source=ServerName;Initial Catalog=AdventureWorks2014;Integrated Security=SSPI;";
var conn = new SqlConnection(connString);
SqlDataReader dataReader;
//you could accept the command text as a parameter
string sql = "select top 10 * FROM [AdventureWorks2014].[HumanResources].[Department]";
var result = new DataTable("Department");
conn.Open();
SqlCommand command = new SqlCommand(sql, conn);
dataReader = command.ExecuteReader();
result.Load(dataReader);
dataReader.Close();
command.Dispose();
conn.Close();
//instead of a datatable, return your object
return result;
}
}
}
C# Interactive
中构建您的 DA 项目,您可以执行以下操作:> #r "D:\blah\Blah\MyDa\bin\Debug\MyDa.dll"
> using MyDa;
> var a = new CustomerDa();
> var r = a.LoadData();
> r.Rows[0]
DataRow { HasErrors=false, ItemArray=object[4] { 1, "Engineering", "Research and Development", [4/30/2008 12:00:00 AM] }, RowError="", RowState=Unchanged, Table=[] }
> r.Rows.Count //you can do all the good LINQ stuff now on the result
10
LinqPad
,如果你喜欢使用LINQ
进行查询。.Dump()
。 - Michael Coxon这应该可以工作!
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NoOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
你可以查看这个链接 在数据库上找到打开连接的数量