我经常在LinqPad和VS之间进行C& P'ing。而且,我只想让过渡尽可能整洁。
因此在LinqPad中,您可以直接在main函数或任何自定义函数中引用ObjectContext。但是如果你在那里包含一个类,你就不能直接引用类的函数/方法中的任何ObjectContext。
你可以做的一件事是:
class MyClass{
ISessionTable<Category> Categories;
public MyClass(ISessionTable<Category> categories){
Categories = categories;
}
public void MyClassFunction(){
Categories.Count().Dump();
}
}
还有其他更简洁的方法吗?以上这一点决定了我应该如何在VS中进行编码,这是我想要避免的(如果可能的话)。
更新
在我的非LinqPad C#代码中,由于各种原因,我不能总是将ObjectContext传递给一个类。因此,为了更具体地解决我的问题,有没有办法访问“类别”(按照上面的例子)而不将其传递给类?换句话说,是否存在某种全球访问方式?
答案 0 :(得分:0)
我想出了一种通过设计方法来解决问题的方法。
让我澄清一下我自己的工作流程或使用LinqPad的原因。我使用LinqPad来测试类,很多类。他们中的许多人必须能够访问数据库。由于复制和粘贴代码块(整个类)比重构更省时,因此我尝试减少在LinqPad和VS之间移植代码时所需的重构量。所以,我尽量保持两个版本的代码尽可能准确。
所以我提出的解决方案是使用第三个任意类来保存ObjectContext。然后在LinqPad中测试一个类将涉及以下代码:
void Main()
{
DB.Categories = Categories;
MyAwesomeClass awesomeness = new MyAwesomeClass();
awesomeness.DumpNumOfCategories();
}
class MyAwesomeClass {
public MyAwesomeClass(){
}
public void DumpNumOfCategories(){
DB.Categories.Count().Dump();
}
}
class DB{
public static ISessionTable<Category> Categories { get; set; }
}
这样,测试中的类(例如MyAwesomeClass)可以在LinqPad和VS版本中保持相同。不再进行重构,也不再污染类构造函数。类DB将需要两个不同的版本,但实现后实际上不需要更改太多。