我必须在 Web API 项目中实现 OData API。
有一篇关于如何做的很好的文章here (实体关系)和here (复合键)。但是所有的源都在使用数据注释来设置 key 。
在我的项目中,所有对实体的约束都是在上下文类中使用 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 Controller 使用。因此,我希望重用现有模型,而不必仅为一个 OData Controller 重新定义约束。
最佳答案
我不确定如何或是否可以重用上下文类中的键,但可以使用从 EntitySet 返回的对象在 WebApi.config 中创建的实体集上设置它们
方法如下:
var personEntitySet = pobjBuilder.EntitySet<Person>("Person");
personEntitySet.EntityType.HasKey<int>(x => x.Key1);
personEntitySet.EntityType.HasKey<int>(x => x.Key2);
关于c# - 如何利用 OnModelCreating (Fluent Api EF) 中定义的现有键与 OData v4 中的 ODataModelBuilder 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34542135/