如何在Odata v4中使用自定义类而不是designer.cs中的类

时间:2014-11-24 23:23:44

标签: odata-v4

C#Web.Api Odata APplication

我是第一次实现Odata V4,并希望使用我自己的自定义类而不是设计器中的数据类。

这是我做的:

我在Visual Studios中创建了一个Data项目,并添加了我的SQL Linq数据表“Video”

我按如下方式创建了数据上下文:

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 Not Acceptable”错误消息

如何确保从数据库返回的数据映射到我的自定义模型?

我的模型构建器是否正确?

可能导致上述错误的原因是什么?

1 个答案:

答案 0 :(得分:0)

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

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

然后它应该工作。 希望它有所帮助。

修改 我对IQueryable的错误,我也使用它。