如何利用OnModelCreating(Fluent Api EF)中定义的现有密钥在OData v4中使用ODataM
本文关键字:密钥 OData v4 ODataM 定义 OnModelCreating 何利用 Fluent Api EF | 更新日期: 2023-09-27 18:28:43
我必须在Web API项目中实现OData API。
关于在这里(实体关系)和在这里(复合键)做这件事,有一篇非常好的文章。但是所有的源都使用数据注释来设置键。
在我的项目中,所有对实体的约束都是在上下文类中使用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
中为其注册约束?
有没有不声明键(使用数据注释)的解决方案?
实体设计已经被许多WebApi控制器所使用。因此,我希望重用现有模型,而不必仅为一个OData控制器重新定义约束。
我不确定如何或是否可以重用上下文类中的键,但可以使用从EntitySet
方法返回的对象在WebApi.config中创建的实体集上设置它们,如下所示:
var personEntitySet = pobjBuilder.EntitySet<Person>("Person");
personEntitySet.EntityType.HasKey<int>(x => x.Key1);
personEntitySet.EntityType.HasKey<int>(x => x.Key2);