Post 使用 Entity Framework 请求与 Web api 中的主键和外键关联的数据库

Post request to database associated with primary and foreign key in web api using Entity Framework

我有一个包含三个 table 主键和外键关联的数据库。

我正在使用 Web API 和 Entity Framework 来自动生成方法。我已经成功地做到了这一点。但是我想单独插入一个带有外键的table。

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

我创建了 Web api 使用自动生成的读写操作方法,例如 .

我能够访问楼层数据库的 json 对象,并相应地访问 Meter 和 Router 的对象。所以,我有一个 post 方法“/api/floorinfoes”和 POST。 但是,如果我想分别插入到 RouterInfo table 和 MeterInfo table 中,该怎么办。例如:如果我想在 MeterInfoes table 中插入一行,那么如何进行.

如果要在 MeterInfoes 中插入一行 Table。

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; }
}

创建一个新的控制器 MeterInfoController 或使用脚手架自动生成

public class MeterInfoController : ApiController
{

    public IHttpActionResult Post(MeterInfo meterInfo)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

         db.MeterInfo.Add(meterInfo);
         db.SaveChanges();

        return Ok(meterInfo);
    }
}

要使用此端点,例如:

Url : /api/MeterInfo

如果您知道 FloorId

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

如果您不知道 FloorId,但请确保 MeterInfo 中的 FloorId 可以为空

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

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