3

現在、odata デモを起動して実行しようとしていますが、次のエラーが表示されます。

'データ コンテキスト タイプ 'TweetPicContext' には、要素タイプがエンティティ タイプではない最上位の IQueryable プロパティ 'Users' があります。IQueryable プロパティがエンティティ タイプであることを確認するか、データ コンテキスト タイプで IgnoreProperties 属性を指定して、このプロパティを無視します。

厄介なのは、私のコードがほとんど既存のプロジェクトのカット アンド ペーストであるということですが、明らかに何かがおかしくなっています...

以前の質問/回答を見ると、一般的な回答はDataServiceKey属性のようですが、私はすでにそれを使用しています。

私が間違っているところに何かアイデアはありますか?

これは私のデータコンテキストです:

public class TweetPicContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Picture> Pictures { get; set; }
}

これは私のユーザーデータクラスです:

[DataServiceKey("UserID")]
public class User
{
    [Key]
    public int UserID { get; set; }

    public string Name { get; set; }
    public string TwitterHandle { get; set; }
    public string TwitterIconUrl { get; set; }
    public int TwitterId { get; set; }
    public string TwitterAuthorizationToken { get; set; }
    public string TwitterAuthorizationTokenSecret { get; set; }
    public DateTime DateJoinedUtc { get; set; }
    public string UniqueDeviceToken { get; set; }

    public virtual ICollection<Picture> Pictures { get; set; } 

    public User()
    {
        DateJoinedUtc = DateTime.UtcNow;
        UniqueDeviceToken = Guid.NewGuid().ToString("N");
    }
}

これは私のユーザーサービスです:

[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class TweetPicOData : DataService<TweetPicContext>
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(IDataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("Users", EntitySetRights.AllRead);
        config.SetEntitySetAccessRule("Pictures", EntitySetRights.AllRead);
        config.UseVerboseErrors = true;
    }

    // see http://romiller.com/2010/07/19/ef-ctp4-tips-tricks-wcf-data-service-on-dbcontext/
    protected override TweetPicContext CreateDataSource()
    {
        var ctx = base.CreateDataSource();

        // Disable proxy object creation.
        ctx.Configuration.ProxyCreationEnabled = false;
        return ctx;
    }
}
4

3 に答える 3

3

WCF Data Services 5.0 では、DbContext の使用時に EF プロバイダーを呼び出すために必要なサポートが追加されました。以前のバージョンの WCF Data Services で DbContext を使用している場合、スタックは EF プロバイダーではなく Reflection プロバイダーを使用するようにフォールバックします。これにより、説明しているものと同様の動作が発生します。

WCF Data Services 5.0 以降のバージョンにアップグレードすると、問題が解決するはずです。バージョン 5.0 以降、NuGet 経由でビットを配布してきました: http://www.nuget.org/packages/Microsoft.Data.Services.Client

HTH、マーク

于 2012-06-19T16:10:31.197 に答える
3

これと同じ問題がありました。データ ソースとして使用していたオブジェクトは別のライブラリにあり、何らかの理由で、Web サイトでクラスを .cs ファイルとして複製すると、すべてが正常に機能しました。バージョンの問題が原因だったと思います。

于 2013-02-28T07:26:36.993 に答える
2

@Trevor と同じ問題があり、最初は同じ方法で解決しました。次に、このスレッドを見つけて、サービス プロジェクトが Microsoft.Data.Services.Client を参照しているのに対し、エンティティを含むプロジェクトは System.Data.Services.Client を参照していることを発見しました。エンティティ プロジェクトの参照を変更することで、機能するようになりました。

于 2014-01-22T11:35:29.613 に答える