asp.net-core / c # - проверить, существует ли строка в таблице, имеющей 2 первичных ключа? - PullRequest
0 голосов
/ 04 июня 2018

Это моя схема таблицы в Microsoft SQL db:

[account_id](PK, FK, int, not null)
[business_id](PK, FK, int, not null)
[identifier](nvarchar(100), null)

Прежде чем добавить новую строку в эту таблицу, я хочу проверить, существует ли строка с одинаковыми значениями в двух первичных ключах.Например, у меня есть таблица:

account_id | business_id | identifier 
_____________________________________    
         1 |           2 | abc
         2 |           3 | cdf

Теперь я пробую разные случаи:

context.add(account_id: 1, business_id: 3, identifier: null) => success
context.add(account_id: 1, business_id: 2, identifier: null) => fail
context.add(account_id: 2, business_id: 2, identifier: null) => success
context.add(account_id: 3, business_id: 3, identifier: null) => success

Короче говоря, я хочу проверить, существует ли уже строка с двумя теми же первичными ключами, что и account_id и business_id, в противном случае создайте новую строку.

Это мой код без проверки дубликатов:

[HttpPost("generate-identifier")]
[ProducesResponseType(typeof(void), 204)]
public IActionResult GenerateIdentifier(GenerateIdentifierRequest model)
{
  if (!ModelState.IsValid) return BadRequest(GetValidationErrors(ModelState));

  BusinessAccount businessAccount = new BusinessAccount() {
    AccountId = GetCurrentUserId(),
    BusinessId = model.BusinessId,
    Identifier = model.Identifier
  };

  context.Add(businessAccount);
  context.SaveChanges();

  return NoContent();
}

1 Ответ

0 голосов
/ 04 июня 2018

Наличие двух или более первичных ключей называется составным ключом.Однако вы не можете использовать атрибут Key для определения составных ключей.Это можно сделать только через Fluent API.Но, похоже, вы уже справились с этой первой частью.

Чтобы вторая часть проверила, доступна ли запись или нет, вы обычно можете использовать запрос linq, используя .Any () или .Count

ex:

var businessAccountCount = context.BusinessAccount.Count(a => a.AccountId == .. && a.business_id == ..);
if(businessAccountCount > 0)
   return ....
else
 {
    //Add your Entity & Return Created
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...