如何利用 OnModelCreating (Fluent Api EF) 中定义的现有键与 OData v4 中的 ODataModelBuilder 一起工作?
How to utilize existing keys defined in OnModelCreating (Fluent Api EF) to work with ODataModelBuilder in OData v4?
我必须在 Web API 项目中实现 OData API。
有一篇很好的文章介绍如何做到这一点 here(entity relations) and here(复合键)。但是所有的来源都在使用数据注释来设置密钥。
在我的项目中,所有对实体的约束都是在上下文 class.
中使用 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 控制器的约束。
我不确定如何或是否可以在上下文 class 中重用这些键,但您可以通过使用像这样从 EntitySet
方法返回:
var personEntitySet = pobjBuilder.EntitySet<Person>("Person");
personEntitySet.EntityType.HasKey<int>(x => x.Key1);
personEntitySet.EntityType.HasKey<int>(x => x.Key2);
我必须在 Web API 项目中实现 OData API。
有一篇很好的文章介绍如何做到这一点 here(entity relations) and here(复合键)。但是所有的来源都在使用数据注释来设置密钥。
在我的项目中,所有对实体的约束都是在上下文 class.
中使用 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 控制器的约束。
我不确定如何或是否可以在上下文 class 中重用这些键,但您可以通过使用像这样从 EntitySet
方法返回:
var personEntitySet = pobjBuilder.EntitySet<Person>("Person");
personEntitySet.EntityType.HasKey<int>(x => x.Key1);
personEntitySet.EntityType.HasKey<int>(x => x.Key2);