c# - 如何利用 OnModelCreating (Fluent Api EF) 中定义的现有键与 OData v4 中的 ODataModelBuilder 一起工作?

标签 c# entity-framework asp.net-web-api odata ef-fluent-api

我必须在 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/

相关文章:

c# - 使用 SSH.NET 从配置字符串加载 SSH 私钥时出现 "Renci.SshNet.Common.SshException: Invalid private key file"

asp.net-mvc - EF代码优先如何在客户端层使用POCO对象

asp.net - 如何将 Entity Framework 与 Web API 混合使用

c# - 如果源类型和目标类型相同,我们是否需要使用asp.net Auto Mapper

angularjs - Angular POST 到 Web API 不传递数据

asp.net-web-api - 找不到与 ASP.NET Web API 中的请求 URI 错误匹配的 HTTP 资源

c# - C# 中的屏幕层次结构

c# - 如何使用 NuGet 包添加对 Visual 项目的引用?

c# - 在 asp.net 中使用 session 变量作为参数

asp.net-web-api - 当请求具有不受支持的 Content-Type 时,如何配置我的 ASP.NET Web API 服务返回的状态代码?