Post 使用实体框架向web api中与主键和外键关联的数据库发布请求

Post 使用实体框架向web api中与主键和外键关联的数据库发布请求,post,asp.net-web-api,entity-framework-6,asp.net-web-api2,asp.net-web-api-routing,Post,Asp.net Web Api,Entity Framework 6,Asp.net Web Api2,Asp.net Web Api Routing,我有一个数据库,其中有三个表,分别具有主键和外键关联 我正在使用WebAPI和实体框架来自动生成方法。我已经成功地做到了这一点。但是我想分别插入到一个带有外键的表中 目前,我能够为主表获取一个JSON对象,该对象具有主键和带外键的表的导航属性。 我使用自动生成读写操作方法创建了WebAPI,如。 我能够访问floors数据库的json对象,并相应地访问Meter和Router。因此,我有一个post方法/api/floorinfoes和post。 但是,如果我想分别在RouterInfo表和

我有一个数据库,其中有三个表,分别具有主键和外键关联

我正在使用WebAPI和实体框架来自动生成方法。我已经成功地做到了这一点。但是我想分别插入到一个带有外键的表中

目前,我能够为主表获取一个JSON对象,该对象具有主键和带外键的表的导航属性。

我使用自动生成读写操作方法创建了WebAPI,如。

我能够访问floors数据库的json对象,并相应地访问Meter和Router。因此,我有一个post方法/api/floorinfoes和post。
但是,如果我想分别在RouterInfo表和MeterInfo表中插入一行,该怎么办呢?例如:如果我想在MeterInfo表中插入一行,那么如何继续执行。

如果你想在MeterInfo表中插入一行

public class MeterInfo
{
        [Key]
        public int MeterId { get; set; }
        public string MeterName { get; set; }

        public int? FloorId { get; set; }

        [ForeignKey("FloorId")]
        public FloorInfo FloorInfo { get; set; }
}
将实体添加到DbContext(如果尚未完成)

public class DbContext : IdentityDbContext<IdentityUser>
{

        public DbSet<FloorInfo> FloorInfos { get; set; }
        public DbSet<MeterInfo> MeterInfos { get; set; }
        public DbSet<RouterInfo> RouterInfos { get; set; }
}
要使用此端点,例如:

Url : /api/MeterInfo
如果你知道地板

   Post Data : {"MeterId": 1, "MeterName" : "Test" , "FloorId" : 10 } 
如果您不知道FloorId,但请确保MeterInfo中的FloorId可为空

 Post Data:  {"MeterId": 1, "MeterName" : "Test"} 

我认为答案是为MeterInfo和RouterInfo自动生成API控制器。

您能否添加一些代码,以便我们了解您所做的工作,并提供帮助?谢谢,我已经添加了数据库快照和web api。我想,这将帮助您理解我的查询。谢谢您的建议。这是否意味着我们必须为数据库中的每个表创建单独的API才能执行。CRUD操作??您告诉我们::如果您不知道FloorId,但请确保MeterInfo中的FloorId可为Null,我们不能将FloorId设置为nullable,因为它是当前表中具有外键引用的其他表的主键。只有当floorinfo表中已经存在Floorrid时,我们才需要应用插入行这样的条件吗?从技术上讲,您不需要创建单独的API,您可以创建另一个方法,如PostMeterInfo,但将其分离要干净得多。如果Floorrid是必需的属性,则检查它是否有值。
 Post Data:  {"MeterId": 1, "MeterName" : "Test"}