2012-02-27 146 views
1

是否有一种简单的方法可以在调试模式下公开ObjectContext和发布模式下的内部?ObjectContext在调试模式下公开,在发布模式下内部

使用Linqpad连接ObjectContext进行快速测试和查询非常方便,因此为了开发目的,我希望它是公开的。但我不想考虑将相同的便利部署到某个智能客户的后果。

+1

智能客户可以使用Reflector。并不是说我批准在生产中公开ObjectContext - 只是将它放在内部可能无法解决您的问题。 – 2012-02-27 08:42:44

回答

2

正如评论所说,这可能不是什么实际用途,但:

#if DEBUG 
public 
#endif 
class YourContext : ObjectContext 
{ 
    ... 
} 

当与产生ObjectContext从.edmx文件打交道时,你需要自定义如何生成C#文件。默认值不是可自定义的,但设计者可以选择“添加代码生成项”。如果你使用这个,你会得到几个选择。我使用的是“ADO.NET自我跟踪实体生成器”,但同样的方法适用于所有人。选择此项将向模型文件添加两个模板文件(Model.tt和Model.Context.tt),您可以根据自己的需要自由修改它们。对于您所要求的修改,您会在Model.Context.tt文件中找到<#=Accessibility.ForType(container)#> partial class。您可以更新它,以便它可以读取

#if DEBUG 
<#=Accessibility.ForType(container)#> 
#endif 
partial class 
+0

对不起,我应该提到我指的是model-first(添加标签)。所以我正在处理一个生成的edmx文件。我无法添加部分类,因为它不能具有不同的访问修饰符。无论如何+1,因为它会以代码优先的方式工作。 – 2012-02-27 08:56:04

+0

@GertArnold您可以使用T4模板来自定义生成的类,并修改该模板以在结果中包含任何您想要的内容,包括预处理器指令。 – hvd 2012-02-27 09:01:59

+0

我不太熟悉(还)。你可以参考一些来源? – 2012-02-27 09:03:05

0

Preprocessor directive

# if(DEBUG) 
     public ObjectContext _context; 
# else 
     internal ObjectContext _context; 
#endif 
+0

不,我的意思是课程本身,而不是我使用的每个实例。 – 2012-02-27 08:49:51

+0

同样可以应用于课堂,就像@hvd在他的回答中所述。 – 2012-02-27 08:50:49

相关问题