C# 如何利用OnModelCreating(Fluent Api EF)中定义的现有键在OData v4中使用ODataModelBuilder?

C# 如何利用OnModelCreating(Fluent Api EF)中定义的现有键在OData v4中使用ODataModelBuilder?,c#,entity-framework,asp.net-web-api,odata,ef-fluent-api,C#,Entity Framework,Asp.net Web Api,Odata,Ef Fluent Api,我必须在Web API项目中实现ODataAPI 有一篇很好的文章介绍了如何使用(实体关系)和(复合键)。但是所有的数据源都使用数据注释来设置关键点 在我的项目中,实体上的所有约束都是使用上下文类中的fluentapi定义的 public class DataContext : DbContext { public DataContext() { } public virtual DbSet<Person> Person { get; set; }

我必须在Web API项目中实现ODataAPI

有一篇很好的文章介绍了如何使用(实体关系)和(复合键)。但是所有的数据源都使用数据注释来设置关键点

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

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 });
        ...
    }

}
公共类DataContext:DbContext
{
公共数据上下文()
{
}
公共虚拟数据库集Person{get;set;}
公共虚拟数据库集Car{get;set;}
...
...
模型创建时受保护的覆盖无效(DbModelBuilder mb)
{
...
mb.Entity().HasKey(jq=>new{p.Key1,p.Key2});
...
}
}
要使用OData,我必须在WebApi.config中注册使用的各个实体

ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Person>("Person"); 
ODataModelBuilder=new ODataConventionModelBuilder();
建造商实体集(“人”);
如何在
WebApi.config
中为其注册约束

有没有不声明键(使用数据注释)的解决方案



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

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

var personEntitySet = pobjBuilder.EntitySet<Person>("Person");
personEntitySet.EntityType.HasKey<int>(x => x.Key1);
personEntitySet.EntityType.HasKey<int>(x => x.Key2);
var personEntitySet=pobjBuilder.EntitySet(“个人”);
personEntitySet.EntityType.HasKey(x=>x.Key1);
personEntitySet.EntityType.HasKey(x=>x.Key2);

谢谢。我试试看。