Отправить запрос в базу данных, связанную с первичным и внешним ключом в веб-API, используя Entity Framework - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть база данных с тремя таблицами с сопоставлением первичного и внешнего ключей.

Я использую Web API и Entity Framework для автоматической генерации методов.Я был успешен в этом.Но я хочу вставить в таблицу с внешним ключом отдельно.

В настоящее время я могу получить объект JSON для главной таблицы, который имеет первичный ключ и свойства навигации для таблицы с внешним ключом.enter image description here

Я создал веб-API с использованием методов автоматического создания операций чтения-записи, таких как.enter image description here

Я могу получить доступ к объекту json для базы данных этажей и, соответственно, для метра и маршрутизатора.Итак, у меня есть метод post "/ api / floorinfoes" с POST.Но что делать, если я хочу вставить отдельно в таблицу RouterInfo и таблицу MeterInfo. Например: если я хочу вставить одну строку в таблицу MeterInfoes, то как это сделать.

1 Ответ

0 голосов
/ 17 февраля 2019

Если вы хотите вставить одну строку в таблицу 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,но убедитесь, что FloorId в MeterInfo имеет значение nullable

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

Я думаю, что ответ заключается в автоматической генерации контроллеров API для MeterInfo и RouterInfo.

...