C# 如何利用OnModelCreating(Fluent Api EF)中定义的现有键在OData v4中使用ODataModelBuilder?
我必须在Web API项目中实现ODataAPI 有一篇很好的文章介绍了如何使用(实体关系)和(复合键)。但是所有的数据源都使用数据注释来设置关键点 在我的项目中,实体上的所有约束都是使用上下文类中的fluentapi定义的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; }
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);
谢谢。我试试看。