LINQPad是否等同于DataContext类?

Nic*_*len 23 linq linqpad linq-to-sql

我已经使用LINQPad刚刚开始,到目前为止,我喜欢它,但我所遇到的最LINQ教程SQL使用全由Visual Studio生成的持续更新等我还相当新的LINQ到SQL一个DataContext类的所以我的问题是LINQPad中的以下等价物(如果有的话)......

MyDbDataContext db = new MyDbDataContext();

...

db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

Luc*_*cas 31

简短回答:您不需要自己创建DataContext.LINQPad附带了大量样本,看看它们.

将LINQPad连接到数据库时,它会为您创建DataContext.DataContext的表(Table<T>)和SubmitChanges()可用作本地成员.

例如,LINQPad默认的"C#Expression"模式你可以写:

from p in Person
where p.Name == "Joe"
select p.Address
Run Code Online (Sandbox Code Playgroud)

在LINQPad的"C#语句"模式中:

var query = from p in Person
            where p.Name == "Joe"
            select p.Address;

query.Dump(); // Dump() shows results below

Person joe = query.First();
joe.Name = "Peter";
SubmitChanges();

joe.Dump(); // shows joe's values under the previous query results
Run Code Online (Sandbox Code Playgroud)

LINQPad的Dump()扩展方法非常有用,可以在任何对象或集合上调用(在LINQPad的语句模式下)来显示下面的结果.

请注意,您甚至不需要连接到数据库即可使用LINQPad.您可以使用内存中的集合:

int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();
Run Code Online (Sandbox Code Playgroud)

实际上,您甚至不需要使用LINQ来使用LINQPad.它也可以作为代码片段编译器使用.

  • 使用LINQ to SQL和LINQPad插入新记录怎么样?我尝试通过使用标识列在我的数据库中的表<TEntity>上调用InsertOnSubmit()来插入,我得到一个异常"无法修改列".从未指定过Id. (2认同)

drs*_*222 16

我知道这已经有了答案,我同意卢卡斯的意见,但想补充一些可能有助于读者回答这个问题的事情.

如果需要,可以从程序集加载自己的DataContext.无论您是加载自己的Context还是让LinqPad为您构建一个,您都在LinqPad生成的"UserQuery"类的上下文中运行.

以下C#语句显示了这一点:

  this.GetType().Name.Dump();  // Shows UserQuery
Run Code Online (Sandbox Code Playgroud)

此UserQuery类派生自DataContext.在这个例子中,我让Linqpad为AdventureWorks数据库构建一个datacontext:

  this.GetType().BaseType.Dump();  // Shows TypedDataContext
Run Code Online (Sandbox Code Playgroud)

如果我加载自己的DataContext名为MyDataContext:

  this.GetType().BaseType.Dump();  // Shows MyDataContext
Run Code Online (Sandbox Code Playgroud)


jar*_*ics 15

如前所述,您不需要创建DataContext,因为LINQPad默认创建一个.
但为了以防万一,您需要第二个DataContext(对于同一个数据库)

var secondDataContext = new UserQuery();
Run Code Online (Sandbox Code Playgroud)

这将创建第二个datacontext,就像自动创建的一样.


小智 10

基于jaraics的回复,我发现UserQuery构造函数需要一个连接字符串.至少它适用于LINQPad版本4.37.11.因此,我从LINQPad创建的UserQuery实例中检索了连接字符串,并使用它创建自己的实例.

var connectionString = this.Connection.ConnectionString;
var secondDataContext = new UserQuery(connectionString);
Run Code Online (Sandbox Code Playgroud)

当我使用上面的代码时,它给了我第二个DataContext.

  • FWIW,这不再有效(至少有4.42.01),因为ctor现在取代了IDbConnection的参数,所以现在你可以做var secondDataContext = new UserQuery(this.Connection); (8认同)