添加EDM和Route
在解决方案资源管理器中,打开App_Start文件夹,然后找到WebApiConfig.cs文件并打开。用下面的代码进行替换之前默认的配置代码。
public static void Register(HttpConfiguration config)
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
} 这个代码处理了两个问题:
1、为OData终结点创建一个数据实体模型(EDM)。
2、为OData终结点添加一个路由。
EDM是一个抽象的数据模型。EDM用于创建元数据文件和定义服务的URIs.ODataConventionModelBuilder 通过使用一组默认的EDM命名约定来创建 EDM。这种方法需要最少的代码。如果你想更多的来控制EDM,使用ODataModelBuilder 类明确的添加属性、键、导航属性来创建EDM。
这个EntitySet 方法就是将一个实体添加到EDM实体中。
modelBuilder.EntitySet<Product>("Products"); 字符串Products定义的是这个实体集的名称。控制器的名称必须匹配实体集的名称。在这个教程中,这个实体集的名称被命名为”Products“,这个控制器被命名为ProductsController。如果你命名这个实体集为”ProductSet“,那么你将需要把控制器命名为”ProductSetController“。请注意一个终结点可以包含多个实体集。为每个实体集调用EntitySet<T> ,然后定义一个合适的控制器。
MapODataRoute 方法为OData终结点添加一个路由。
config.Routes.MapODataRoute("ODataRoute", "odata", model); 第一个参数是一个路由的名称。你的服务的客户端看不到这个名称的。第二个参数是终结点URL的前缀。鉴于这些代码,针对产品实体集的URL是http://hostname /odata/Products。你的应用程序可能会有超过一个的OData终结点。对于每一个终结点,调用MapODataRoute 方法,提供一个唯一的路由名称和一个唯一的URL前缀。
Seed the Database (可选的)
在这一步骤中,您将使用EF框架来插入数据库中一些测试数据。这一步是可选的,但是它能让你立刻测试出OData终结点。
从工具菜单中找到如下
并键入如下命名:
Enable-Migrations 这将添加一个Migrations 的文件夹,并有一个Configuration.cs的文件
打开Configuration.cs,在Seed方法中添加如下的代码:
protected override void Seed(OData.Models.ProductServiceContext context)
{
context.Products.AddOrUpdate(new Product[] {
new Product() { ID = 1, Name = "Hat", Price = 15, Category = "Apparel" },
new Product() { ID = 2, Name = "Socks", Price = 5, Category = "Apparel" },
new Product() { ID = 3, Name = "Scarf", Price = 12, Category = "Apparel" },
new Product() { ID = 4, Name = "Yo-yo", Price = 4.95M, Category = "Toys" },
new Product() { ID = 5, Name = "Puzzle", Price = 8, Category = "Toys" },
});
} 然后再在软件包管理器控制台窗口,输入以下命令,并顺序执行两个命令:
Add-Migration Initial
Update-Database 测试OData终结点
在这一部分,我们将使用 Fiddler Web Debugging 来发送请求到终结点来检测响应消息。这将帮助您去理解OData终结点的功能。
在Visual Studio中,按F5进行运行程序。
1、然后在Fiddler中http://localhost:3629/Odata/Products ,获得产品列表