我在 Odata.org 上阅读有关 OData 源的信息时,我遇到了这个关于关联的部分。
关联定义了两个或多个实体类型(例如,Employee WorksFor Department)之间的关系。关联的实例被分组在关联集中。导航属性是实体类型上的特殊属性,它们绑定到特定关联,可用于引用实体的关联。
最后,所有实例容器(实体集和关联集)都分组在一个实体容器中。
将上述段落放入 OData 术语中,OData 服务公开的提要由实体集或实体类型上的导航属性表示,该实体类型标识实体集合。例如,由 URI http://services.odata.org/OData/OData.svc/Products标识的实体集或由http://services.odata.org中的“产品”导航属性标识的实体集合 /OData/OData.svc/Categories(1)/Products 标识由 OData 服务公开的条目提要。
我正在使用 Visual Studio 2012 在 C# 中创建 OData 服务,并希望使用提到的 URL 功能。但是我不知道如何设置它。有人知道怎么做这个吗?
这是我的代码:
public class AssociationTest : DataService<ServiceContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
}
public class ServiceContext
{
CategoryList _categories = new CategoryList();
public IQueryable<Category> CategorySet
{
get{return _categories.AsQueryable();}
}
ProductList _products = new ProductList();
public IQueryable<Product> ProductSet
{
get{return _products.AsQueryable();}
}
}
[System.Data.Services.Common.DataServiceKeyAttribute("ID")]
public class Category
{
public string Type
{
get;
set;
}
public int ID
{
get;
set;
}
}
public class CategoryList : List<Category>
{
public CategoryList()
: base()
{
Add(new Category { Type = "Hardware", ID = 0 });
Add(new Category { Type = "Software", ID = 1 });
}
}
[System.Data.Services.Common.DataServiceKeyAttribute("ID")]
public class Product
{
public string Name
{
get;
set;
}
public int ID
{
get;
set;
}
public int CategoryID
{
get;
set;
}
}
public class ProductList:List<Product>
{
public ProductList()
: base()
{
Add(new Product { Name = "Computer", ID = 0, CategoryID = 0 });
Add(new Product { Name = "Phone", ID = 1, CategoryID = 0 });
Add(new Product { Name = "Outlook", ID = 2, CategoryID = 1 });
Add(new Product { Name = "Excel", ID = 3, CategoryID = 1 });
}
}