Я пытаюсь получить OData демо и работает в данный момент, но я вижу эту ошибку:EF OData - тип элемента не является тип сущности
'On data context type 'TweetPicContext', there is a top IQueryable property 'Users' whose element type is not an entity type. Make sure that the IQueryable property is of entity type or specify the IgnoreProperties attribute on the data context type to ignore this property.
Раздражает то, что мой код в значительной степени является вырезкой и вставкой существующего проекта - но, очевидно, что-то не так ...
Глядя на предыдущие вопросы/ответы, общий ответ кажется атрибутом 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;
}
}
Это находится на веб-сайте ASP.Net MVC 4 - svc-файл говорит 'System.Data.Services.DataServiceHostFactory, System.Data.Services, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' – Stuart
Можете ли вы попробовать поднять вашу версию служб данных WCF до версии 5.0 или выше? Более ранние версии не признавали DbContext как принадлежащий Entity Framework, поэтому WCF DS фактически переключается на использование поставщика Reflection, а не на поставщика EF. (Длинная история, но я думаю, что переход до 5.0 или 5.0.1 исправит вашу проблему.) Http://nuget.org/packages/Microsoft.Data.Services.Client –
Bazinga! Результат. Обновите ответ, и вы выиграете 10 очков. Я предполагаю, что моя старая служба использовала версию ctp - и это как-то сработало. Большое спасибо за вашу помощь. – Stuart