我正在尝试启动并运行一个 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;
}
}