LinqPad:直接引用类中的ObjectContexts

时间:2011-10-26 02:48:16

标签: c# linqpad objectcontext

我经常在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传递给一个类。因此,为了更具体地解决我的问题,有没有办法访问“类别”(按照上面的例子)而不将其传递给类?换句话说,是否存在某种全球访问方式?

1 个答案:

答案 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将需要两个不同的版本,但实现后实际上不需要更改太多。