使用Entity Framework将请求发布到与web api中的主键和外键关联的数据库

问题描述 投票:0回答:1

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

我正在使用Web API和Entity Framework来自动生成方法。我成功地做到了这一点。但我想分别插入带有外键的表。

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

我使用自动生成读写操作方法创建了web api。 enter image description here

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

post asp.net-web-api entity-framework-6 asp.net-web-api2 asp.net-web-api-routing
1个回答
1
投票

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

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控制器。

© www.soinside.com 2019 - 2024. All rights reserved.