C# 当Edmx执行相同的任务时,为什么要使用EF 5.X DbContext生成器?

C# 当Edmx执行相同的任务时,为什么要使用EF 5.X DbContext生成器?,c#,entity-framework,C#,Entity Framework,我发现EF5DBContext很难理解 在VisualStudio 2012中,当我选择 Project>addnewitem>ADO.Net实体数据模型 然后选择AdventureWorks数据库文件,它将生成一个edmx文件(要求我在本地复制数据库文件后) 现在,我可以开始运行查询了 AdventureWorks_DataEntities entities = new AdventureWorks_DataEntities var query = from p in entities.Pro

我发现EF5DBContext很难理解

在VisualStudio 2012中,当我选择

Project>addnewitem>ADO.Net实体数据模型

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

现在,我可以开始运行查询了

AdventureWorks_DataEntities entities = new AdventureWorks_DataEntities
var query = from p in entities.Products
            where p.ListPrice >= 0
            select p;
让我困惑的是,为什么我要使用

Project > Add New Item > EF 5.X DBcontext Generator
这样我就可以将WPF控件绑定到数据库表了吗?但是我的查询正在运行,我能不能不绑定到edmx对象,毕竟我可以“看到”已经映射的表,比如Product.cs

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

问题第1部分:

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

步骤2:添加一个新的DbContext,它将自动检测上述edmx文件,并提供一个DbContext,用户可以将控件绑定到该DbContext,如datagrids等

问题第二部分:

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

谢谢

当您添加新的“ADO.NET实体数据模型”时,除了创建EDMX之外,它还为您创建了DbContext,即“AdventureWorks\U DataEntities”

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

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

问题1:您只需要步骤1,“AdventureWorks\u DataEntities”是您的DbContext。如果打开“AdventureWorks_DataEntities.cs”文件,您将看到该类继承自DbContext

问题2:这是一个不同的问题,您应该打开一个单独的问题,询问如何将WPF与实体框架绑定。在你这么做之前,我建议你先在网上搜索,因为有很多资源可以解释这一点。例如,此MSDN文章:

没有投票,没有意见,没有答案,至少这为我赢得了一枚TumbleWeeder徽章……我在寻找完全相同的答案……值得一提的是,如果您采用代码优先的方法,您将不会为您生成DBContext,因此您需要自己制作一个。这就是它存在的原因。