c#OData V4,EntityFramework 6,缺少属性

问题描述 投票:0回答:1

我正在尝试将在oData V3上运行良好的服务迁移到V4。我正在使用EntityFramework 6从数据库中生成代码。这是生成的代码:

   namespace MyEntities
{
    using System;

    public partial class Civilite
    {

        public System.Guid pkCivilite { get; set; }
        public string civilite { get; set; }

    }
}

这是我的WebApiConfig:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services


            ODataModelBuilder builder = new ODataModelBuilder();

            builder.Namespace = "DataService";
            builder.ContainerName = "Container";

            var civiliteSet = builder.EntitySet<MyEntities.Civilite>("Civilites");
            civiliteSet.EntityType.HasKey(entity => entity.pkCivilite);

            config.MapODataServiceRoute(
            routeName: "odata",
            routePrefix: null,
            model: builder.GetEdmModel());

            config.EnsureInitialized();


        }

    }

这是我的控制器:

public class CivilitesController : ODataController
    {

        MyEntities.Container db = new MyEntities.Container();

        private bool CiviliteExists(Guid key)
        {
            return db.CiviliteSet.Any(c => c.pkCivilite == key);
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }

        [EnableQuery]
        public IQueryable<MyEntities.Civilite> Get()
        {

            return db.CiviliteSet;
        }

        [EnableQuery]
        public SingleResult<MyEntities.Civilite> Get([FromODataUri] Guid key)
        {
            IQueryable<MyEntities.Civilite> result = db.CiviliteSet.Where(p => p.pkCivilite == key);
            return SingleResult.Create(result);
        }

        public async Task<IHttpActionResult> Post(MyEntities.Civilite civilite)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            db.CiviliteSet.Add(civilite);
            await db.SaveChangesAsync();
            return Created(civilite);
        }

但是元数据不会返回字符串类型的属性“ civilite”。它仅返回Guid类型的主键“ pkCivilite”。

<?xml version="1.0" encoding="ISO-8859-1"?>
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<edmx:DataServices>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="DataService">
<EntityType Name="Civilite">
<Key>
<PropertyRef Name="pkCivilite"/>
</Key>
<Property Name="pkCivilite" Nullable="false" Type="Edm.Guid"/>
</EntityType>
<EntityContainer Name="Container">
<EntitySet Name="Civilites" EntityType="DataService.Civilite"/>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>

[我试图将[DataMember]放在“文明”属性上,但没有成功。客户要求工作。我获得了所有记录,但仅具有“ pkCivilite”属性。我究竟做错了什么 ?感谢您的帮助。

c# entity-framework entity-framework-6 odata edmx
1个回答
0
投票

我的错误是使用ODataModelBuilder而不是ODataConventionModelBuilder

所以我需要写:

ODataModelBuilder builder = new ODataConventionModelBuilder();
© www.soinside.com 2019 - 2024. All rights reserved.