【问题标题】:how to implement computed field for model in web api odata using EF 6如何使用 EF 6 在 web api odata 中实现模型的计算字段
【发布时间】:2014-07-11 17:44:11
【问题描述】:

我正在创建一个 web api odata 控制器,一切都很好,直到我尝试将派生字段添加到模型中。我不希望该字段存在于数据库中,并且该字段不需要是可查询的。

给定模型;

public class Foo
{
    public Int64 Id { get; set; }
    public string SomeDatabaseSourcedField{ get; set; }
    public string SomeDerivedField{ get; set; }
}

如果我有这样的控制器;

private FooDbContext db = new FooDbContext();

[Queryable]
public IQueryable<Foo> GetFoo()
{        
    return db.Foo;
}

SomeDerivedField的值如何设置?

注意:我已尝试将该字段标记为 not mapped,但似乎该字段未在 api 调用中返回。

【问题讨论】:

    标签: api web odata entity-framework-6


    【解决方案1】:

    这是我的答案,我使用的是 odata v4。 http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ 我已成功获取响应中的派生字段。

    首先,定义一个派生自 foo 的类:

    public class MyFoo:Foo
    {
        public string SomeDerivedField{ get; set; }
    }
    

    其次,建立edm模型:

        public static IEdmModel GetModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<MyFoo>("Foo");
            builder.EntityType<MyFoo>().DerivesFromNothing();
    
            builder.Namespace = typeof(MyFoo).Namespace;
    
            return builder.GetEdmModel();
        }
    

    三、检索数据:

        public IHttpActionResult Get()
        {
            IQueryable<MyFoo> foos= db.Foos.Select(
                t => new MyFoo()
                {
                    Id = t.Id,
                    Name = t.Name,
                    SomeDerivedField= t.Name + SqlFunctions.StringConvert((double)t.Id)
                });
            return Ok(foos);
        }
    

    【讨论】:

      猜你喜欢
      • 2015-12-27
      • 2020-08-06
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多