Json WebAPI实体框架DB first with WebAPI OData控制器:模型属性别名问题

Json WebAPI实体框架DB first with WebAPI OData控制器:模型属性别名问题,json,entity-framework,asp.net-mvc-4,asp.net-web-api,Json,Entity Framework,Asp.net Mvc 4,Asp.net Web Api,我一直面临一个问题,即Web API OData控制器的Web API 2.2。我正在做一个PoC,其中我需要使用与相应模型道具(DB表列)不同的列名显示服务的JSON输出 (例如,Customer表中的“CompanyName”在我的服务的JSON输出中应显示为“cName”。) 我在Northwind数据库中使用DB first方法,使用ADO.NET EF创建了一个模型,并使用OData EF创建了一个控制器。(所有默认值到目前为止没有代码更改) 现在,我尝试使用 1) 数据合约和数据成员

我一直面临一个问题,即Web API OData控制器的Web API 2.2。我正在做一个PoC,其中我需要使用与相应模型道具(DB表列)不同的列名显示服务的JSON输出

(例如,Customer表中的“CompanyName”在我的服务的JSON输出中应显示为“cName”。)

我在Northwind数据库中使用DB first方法,使用ADO.NET EF创建了一个模型,并使用OData EF创建了一个控制器。(所有默认值到目前为止没有代码更改)

现在,我尝试使用

1) 数据合约和数据成员->直接在模型类上指定(是,自动生成)

2) JsonProperty->直接在模型类上指定(是,自动生成)

3) DTOs[它可以工作,但我不想使用DTOs]

不幸的是,前两种方法不适用于我(不确定我在这里遗漏了什么)和我试图避免的DTO。 我今天一整天都在忙这个,如果你能给我指出一个正确的方法,我将不胜感激


注意:如果我使用常规的Web API控制器,那么就不用OData控制器。我意识到这是旧的,我不确定您使用的是哪个版本的OData,但简单的答案是,您必须在模型生成器中指定所有这些信息

这里有一个例子

        var builder = new ODataConventionModelBuilder();
        var entity = builder.EntitySet<Model>("models").EntityType;
        entity.Name = "model";
        entity.Property(p => p.Id).Name = "id";
        entity.Property(p => p.Name).Name = "name";
        entity.Property(p => p.Description).Name = "description";
var builder=new ODataConventionModelBuilder();
var entity=builder.EntitySet(“模型”).EntityType;
entity.Name=“model”;
Property(p=>p.Id).Name=“Id”;
entity.Property(p=>p.Name).Name=“Name”;
entity.Property(p=>p.Description).Name=“Description”;

祝你好运

如果您想要一种更简单的方法来别名您的属性,您还可以使用DataContractSerializer属性,例如我忘记的[DataMember(Name=“id”)],但从开发的角度来看,这是可行的,而且要容易得多。