这是我仍然遇到的问题的延续here。我试图阻止OData
反射提供程序试图公开我的程序集中的所有CLR类。有没有办法拨打OData服务反射提供程序?
考虑下面的CLR类:
public class Foo
{
public Guid FooID { get; set; }
public string FooName { get; set; }
}
及以下类暴露Foo
作为IQueryable
集合:
public class MyEntities
{
public IQueryable<Foo> Foos
{
get
{
return DataManager.GetFoos().AsQueryable<Foo>();
}
}
}
而下面DataService
类:
public class MyDataService : DataService<MyEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Foos", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
这所有作品hunkey都这样做rey和DataService
可以显示Foo
的集合。如果变化Foo
一个非常简单的基本对象扩展,如:
public class Foo : MyObjectBase
{
public Guid FooID { get; set; }
public string FooName { get; set; }
}
然后(即使我只是想揭露1集),反射提供商抓住扩展MyObjectBase
所有对象,导致错误的负载。
的基类是实现多个接口,并提供另一个属性,如简单的抽象类:
public abstract class MyObjectBase: IDataObject, IDataErrorInfo, INotifyPropertyChanged, IDisposable
{
public virtual Guid ID { get; set; }
}
即使穿上任何公共属性IgnoreProperties
这里没有帮助。有什么方法可以调出反射提供者正在做的事情吗?
我有同样的问题,我无法找到很好的解决方案。我最终直接在Foo中加倍了MyObjectBase属性。 – 2012-02-03 01:44:14
呃,这个项目中的几百个CLR类别并不是真正的选择。仍在制定自定义提供商路线。 – 2012-02-03 01:50:25
的确,我只有一对夫妇。你可以有MyObjectBaseOdata和MyObjectBaseEverythingElse我猜... – 2012-02-03 01:52:44