如何利用OnModelCreating(Fluent Api EF)中定义的现有密钥与OData v4中的ODataModelBuilder一起使用?

时间:2015-12-31 06:28:43

标签: c# entity-framework asp.net-web-api odata ef-fluent-api

我必须在Web API项目中实现OData API。

关于这样做的文章非常好here(实体关系)和here(复合关键字)。但所有来源都使用数据注释来设置密钥。

在我的项目中,实体的所有约束都是在上下文类中使用Fluent Api定义的。

public class DataContext : DbContext
{
    public DataContext()
    {
    }
    public virtual DbSet<Person> Person { get; set; }
    public virtual DbSet<Car> Car { get; set; }
     ...
     ...

    protected override void OnModelCreating(DbModelBuilder mb)
    {
        ...
         mb.Entity<Person>().HasKey(jq => new { p.Key1, p.Key2 });
        ...
    }

}

要使用OData,我必须在WebApi.config中注册各个实体。

ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Person>("Person"); 

如何在WebApi.config中为其注册约束?

是否有任何解决方案没有声明密钥(使用数据注释)?

许多Web Api控制器已经在使用实体设计。因此,我希望重用现有模型,而不必仅重新定义一个OData控制器的约束。

1 个答案:

答案 0 :(得分:2)

我不确定如何或者是否可以重用上下文类中的键,但是您可以使用从{{返回的对象)在WebApi.config中创建的实体集上设置它们。 1}}这样的方法:

EntitySet