17

我发现这个 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;

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

Project > Add New Item > EF 5.X DBcontext Generator

是否可以将我的 WPF 控件绑定到数据库表?但是我的查询正在工作,我可以不只是绑定到 edmx 对象,毕竟我可以“看到”已经映射的 Product.cs 等表。

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

问题第 1 部分:

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

第二步:添加一个新的DbContext,它会自动检测上面的edmx文件并提供一个可以绑定控件的dbcontext,比如datagrids等。

问题第 2 部分:

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

谢谢

4

1 回答 1

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

于 2013-11-08T15:02:17.343 回答