不再调用InitializeService,无法解决原因

时间:2011-11-03 00:35:26

标签: wcf wcf-data-services

我有一个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方法中放置一个断点,那么它看起来就像是在调用它。

真的不确定现在发生了什么......

1 个答案:

答案 0 :(得分:0)

肖恩在上述评论中帮助确定了正确的答案。

基本上发生的事情是,当我导入项目时,stylecop将我的密钥名称从EntityID调整为EntityId。

在SQL EF层中,这没关系 - 因为我为键设置了映射。但是,在oData服务中,它正在寻找以“ID”结尾的名称(区分大小写),当它没有找到它时,它没有解释就被禁止了 - 不是很容易调试!