在实体框架中返回模型的一部分

时间:2016-02-19 18:19:46

标签: c# entity-framework

抱歉,我无法很好地标题。

关键是,我在C#.NET的Web API实体框架中定义了一个模型model1

说模型有以下字段

field1field2field3field4field5

web api方法返回此模型。我从Web应用程序和Android应用程序调用web api,一切正常,没问题。

问题是,在我的Android应用程序中,我只需要field1,field2&字段3。

我想使用相同的模型,但只返回必填字段,忽略其余字段以优化移动设备上的数据消耗。

我有办法做到这一点。是的,我可以创建另一个只包含必填字段的模型model2,并将值分配给model2并返回它,但我不想创建另一个模型。

没有创建另一个模型的原因是我几乎在实时应用程序中 47个字段和各种方法将仅返回这些字段的子集,并且必须返回其中的所有47个字段。因此,维护成为一个问题。

希望我的要求合理,会请求一些帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您不想创建另一个简化模型,那么Web api控制器操作的一个选项是返回对象类型。

在控制器的最终返回语句中,您可以从model1类中进行匿名投影,并仅返回选定的字段。

public class MyController : ApiController
{
 public object SomeGetAction()
 {
   var model1 = GetModel1();

   if (android)
   {
    // send back partial payload
    return new { field1 = model1.field1, field3 = model1.field3 }; 
   }

   // for clients needing full payload.
   return model1;
 }
}

这可确保您通过线路发送的数据减少。但请注意,您仍将从数据库中提取所有字段或任何后端源。

另一种选择是返回Dictionary 无论哪种方式,你都会失去字段名称的强类型,而没有强大的模型2。