2014-11-24 55 views
0

C#Web.Api OData的应用探析如何的OData使用自定义类v4的,而不是从designer.cs类

我执行的OData V4的第一次,想用我自己的自定义类,而不是来自设计者的数据类。

这里是我做过什么:

我在视觉工作室创建的数据项目,并添加我的SQL的LINQ数据表中的“视频”

我创建的数据上下文如下:

public class VideoDataContext : DbContext 
{ 
public VideoDataContext(): base("name=VideoData") 
{ 
DbSet<VideoEf> Videos { get; set; } 
} 

和我的自定义类如下:

[Serializable] 
    [DataContract] 
    public class VideoEf : Repository 
    { 
     [DataMember] 
     public int Id { get; set; } 

     [DataMember] 
     public string Isrc { get; set; } 
} 

和模型生成器:

public Microsoft.OData.Edm.IEdmModel GetEdmModel() 
{ 
ODataModelBuilder builder = new ODataConventionModelBuilder(); 
EntityTypeConfiguration<VideoEf> titleType = builder.EntityType<VideoEf>(); 
builder.EntitySet<VideoEf>("Video"); 
return builder.GetEdmModel(); 
} 

在我的视频控制器:

public class VideoController : ODataController 
{ 
VideoDataContext db = new VideoDataContext (); 
[EnableQuery(PageSize = 20, MaxExpansionDepth = 5)] 
public IHttpActionResult Get() 
{ 
return Ok(db.Videos.AsQueryable()); 
} 

当我拨打电话,以获得视频实体我不断收到一个” 406不可接受”的错误消息

我怎样才能确保从数据库返回的数据映射到我的自定义模型?

我的模型生成器是否正确?

什么可能导致上述错误?

回答

0

您不需要返回IQueryable,因为您具有EnableQuery属性,只需返回DbSet即可。

你也不需要任何WCF属性和EntityTypeConfiguration<VideoEf> titleType = builder.EntityType<VideoEf>();

然后,它应该只是工作。 希望它有帮助。

编辑 我对IQueryable的错误,我也使用它。

相关问题