Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net DbContext与ObjectContext_Asp.net_Entity Framework - Fatal编程技术网

Asp.net DbContext与ObjectContext

Asp.net DbContext与ObjectContext,asp.net,entity-framework,Asp.net,Entity Framework,我以前对我所有的DB模型都使用DbContext,直到我读到,在遵循这些步骤之后,我发现我自己被迫切换到ObjectContext,因此,有很多代码需要更改,但我不确定我是否做了正确的事情,特别是在谷歌搜索了这些差异之后,我注意到DbContext比ObjectContext更新更好,而且我还注意到在切换到ObjectContext时丢失了很多东西,比如“迁移”和“查找”方法等等 那么,将我的代码更改为使用ObjectContext而不是DbContext来通过预生成视图来提高速度是正确的吗?还

我以前对我所有的DB模型都使用
DbContext
,直到我读到,在遵循这些步骤之后,我发现我自己被迫切换到
ObjectContext
,因此,有很多代码需要更改,但我不确定我是否做了正确的事情,特别是在谷歌搜索了这些差异之后,我注意到
DbContext
ObjectContext
更新更好,而且我还注意到在切换到
ObjectContext
时丢失了很多东西,比如“迁移”和“查找”方法等等


那么,将我的代码更改为使用
ObjectContext
而不是
DbContext
来通过预生成视图来提高速度是正确的吗?还是我做错了什么?

我建议您使用DbContext,因为它是ObjectContext的简化版本。如果DbContext不够,则可以从DbContext访问包装的ObjectContext:

((IObjectContextAdapter)dbContext).ObjectContext

EF Power Tools中的“生成视图”选项也可用于代码优先(DbContext)。右键单击从DbContext派生的文件并选择“实体框架”=>“生成视图”。有关详细信息,请参见

,您不必切换到ObjectContext来获取预生成的视图。我创建了T4模板,用于为CodeFirst生成预生成的视图。请看这里:
T4模板可在Visual Studio Gallerry上获得。这是我的博客文章的结尾,描述了如何获取和使用它们

非常感谢先生,但是在创建了
{Context}.Views.cs
之后,我如何告诉DBContext使用生成的视图呢?提前感谢文件名告诉您应该使用什么上下文-如果您的上下文名为MyContext,那么T4文件名应该是MyContext.Views.cs.Hi Pawel,非常感谢您编写这些T4模板。我喜欢用它们。我已经对它们进行了一些定制,并希望在命名导航属性时使用外键关系名称,以防重复。有什么建议吗?@UmarFarooqKhawaja-我不知道你在说什么T4模板。视图生成模板只是为模型和映射创建ESQL视图。它们不应该是定制的,模型必须是正确的才能使用。如果您谈论的是从model/edmx文件生成代码的模板,那么它们是随VS附带的内置模板,也可以在VS Gallery上获得。它们确实可以定制。不幸的是,模型不包含约束名称。但是,您不应该得到重复的名称,因为名称应该是非限定的。它们可以通过“自定义反向工程模板”添加到解决方案中。事实上,它们是不合格的。生成的代码没有错误。这只是因为单向化策略也会混淆,因此不知道哪个导航属性对应于哪个外键关系。例如,我更喜欢获取DebitAccounts,CreditAccounts,而不是Accounts,Accounts1。为此,我想使用外键名。我希望你能给我指出正确的方向。我在一个大型应用程序中使用了dbContext,遇到了一个小问题,我必须使用ObjectContext中的功能,并在这篇文章中找到了它。这工作得很好(我对返回匿名对象的DB执行任意SQL语句,然后尝试序列化该返回集等等)。。。我使用的SQL字符串绝对正确,但我遇到另一个错误:无法在当前范围或上下文中解析。确保所有引用的变量都在范围内,所需的架构已加载,并且NAMASPACE已正确引用?在我的SQL字符串中注入[dbName].[dbo]可以修复它-为什么ObjectContext不能隐式地知道db名称和名称空间?