为什么在Edmx执行相同工作时使用EF 5.X DbContext Generator?

iAt*_*_it 17 c# entity-framework

我发现这个EF 5 dbContext很难掌握.

在VisualStudio 2012中,当我选择时

Project > Add New item > ADO.Net Entity Data Model

并选择AdventureWorks数据库文件,它会生成一个edmx文件(在要求我在本地复制数据库文件之后).

现在就是这样,我现在可以开始运行查询,例如

AdventureWorks_DataEntities entities = new AdventureWorks_DataEntities
var query = from p in entities.Products
            where p.ListPrice >= 0
            select p;
Run Code Online (Sandbox Code Playgroud)

令我困惑的是,为什么我会使用

Project > Add New Item > EF 5.X DBcontext Generator
Run Code Online (Sandbox Code Playgroud)

是这样我可以将我的WPF控件绑定到数据库表吗?但我的查询工作正常,我不能只是绑定到edmx对象,毕竟我可以"看到"已经映射的Product.cs等表.

如果这是正确的,那么说使用EntityFramework是一个两步过程是正确的

问题第1部分:

步骤1:添加从数据库生成的新edmx文件

步骤2:添加一个新的DbContext,它将自动检测上面的edmx文件,并提供一个可以绑定控件的dbcontext,例如datagrids等.

问题第2部分:

我已经可以 Product.cs在我的edmx模型中看到已经从步骤1中的Product表映射,为什么我不能直接绑定我的WPF控件,为什么上面的步骤2是必要的?

谢谢

chu*_*wik 16

当您添加新的"ADO .NET实体数据模型"时,除了创建EDMX之外,它还会为您创建DbContext,它是"AdventureWorks_DataEntities".

因此,您不需要添加"EF 5.X DBcontext Generator",这已存在于您的项目中.如果在Visual Studio中单击.edmx文件左侧的箭头展开它,您将看到几个文件.其中两个将以".tt"结尾.这些是T4模板,它们在您修改EDMX时自动生成模型实体和DbContext.

希望这能澄清概念,直接回答您的问题:

问题1:您只需要步骤1,"AdventureWorks_DataEntities"就是您的DbContext.如果您打开"AdventureWorks_DataEntities.cs"文件,您将看到此类继承自DbContext.

问题2:这是一个不同的问题,您应该打开一个单独的问题,询问如何将WPF与实体框架绑定.在你这样做之前,我建议你先在网上搜索,因为有很多资源可以解释这一点.例如,这篇MSDN文章:http: //msdn.microsoft.com/en-us/data/jj574514.aspx

  • 值得一提的是,如果您采用代码优先方法,则不会为您生成DBContext,因此您需要自己创建一个.这就是它存在的原因. (14认同)