我正在尝试公开一个可供使用的模型OData
服务。我目前采取的方法是:
1)在模型中定义一个类来公开IQueryable
集合例如:
public class MyEntities
{
public IQueryable<Customer> Customers
{
get
{
return DataManager.GetCustomers().AsQueryable<Customer>();
}
}
public IQueryable<User> Users
{
get
{
return DataManager.GetUsers().AsQueryable<User>();
}
}
}
2)建立WCFDataService
使用可查询的集合类,例如:
public class MyDataService : DataService<MyEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Customers", EntitySetRights.All);
config.SetEntitySetAccessRule("Users", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
我使用这种方法遇到了 3 个问题和/或限制:
1)我无法将任何派生类集合添加到IQueryable
lists.
2) 我必须申请IgnoreProperties
属性来隐藏从基类型派生的任何成员。
3)我无法阻止不需要的实体被访问OData
服务并导致错误。例如,我只希望公开 BLL 层对象,但似乎模型的反映远远超出了我添加到可查询列表中的类的成员,并选取了所有 DAL 类,导致错误未定义,而且与 BLL 类同名。 BLL 类成员没有到 DAL 类的链接。至少,我希望完全忽略这些类。
任何有关如何解决这些问题的指示将不胜感激。我应该对此采取不同的方法吗?例如,我应该实施IQueryable
直接在我的模型集合中?
Thanks.