我有一个odata wcf服务,看起来没有调用InitializeService ......
代码如下:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class MyDataService : DataService<MyContext>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
// Examples:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
config.UseVerboseErrors = true;
}
// see http://romiller.com/2010/07/19/ef-ctp4-tips-tricks-wcf-data-service-on-dbcontext/
protected override AzureAppContext CreateDataSource()
{
var ctx = base.CreateDataSource();
// Disable proxy object creation.
ctx.Configuration.ProxyCreationEnabled = false;
return ctx;
}
}
当这个运行时,我得到一个例外的报告:
服务器在处理请求时遇到错误。例外 消息是'在数据上下文类型'MyContext',有一个顶部 IQueryable属性'MyEntities',其元素类型不是实体 类型。确保IQueryable属性是实体类型或 将数据上下文类型指定为IgnoreProperties属性 忽略这个属性。'有关详细信息,请参阅服务器日志
在这种情况下,MyEntities是EntityFramework Code First DBSet。
如果我在上下文中放置[IgnoreProperties("MyEntities")]
,则会在第二个属性集上抛出错误。
Key我认为:如果我在InitializeService方法中放置一个断点,那么它看起来就像是在调用它。
真的不确定现在发生了什么......
答案 0 :(得分:0)
肖恩在上述评论中帮助确定了正确的答案。
基本上发生的事情是,当我导入项目时,stylecop将我的密钥名称从EntityID调整为EntityId。
在SQL EF层中,这没关系 - 因为我为键设置了映射。但是,在oData服务中,它正在寻找以“ID”结尾的名称(区分大小写),当它没有找到它时,它没有解释就被禁止了 - 不是很容易调试!