Можно ли при добавлении объекта, без дополнительного поиска вставить индекс на существующий объект, если его имя должно быть уникальным?
Т.е.:
public class SerialInfo
{
public int Id { get; set; }
public string Title { get; set; }
public string TitleOriginal { get; set; }
public string Description { get; set; }
public Uri PreviewImageUri { get; set; }
public bool IsMovie { get; set; }
public uint? SeriesCount { get; set; }
public uint? CurrentSeriesCount { get; set; }
public virtual Studio Studio { get; set; }
public int Year { get; set; }
public virtual List<SerialGenre> Genres { get; set; }
public FullSerialInfo FullInfo { get; set; }
}
Где к примеру у поля Studio
уникальное имя, т.е. не должно быть дубликатов, и когда при попытке добавления сериала, такая студия уже существует, то получается исключение:
MySqlException: Duplicate entry 'Some StudioName' for key 'IX_Producers_Name'
Можно ли без поиска студии сделать так, что бы если она уже есть, просто добавился ее ключ?
На данный момент, все это делаю вот так:
[HttpPost]
public async Task<ActionResult<SerialInfo>> PostSerialInfo(SerialInfo serialInfo)
{
if (SerialInfoExists(new KeyValuePair<string, string>(serialInfo.Title, serialInfo.TitleOriginal),
out SerialInfo fInfo))
{
return RedirectToAction("GetSerialInfo", new {id = fInfo.Id});
}
Studio existingStudio = _context.Studios.FirstOrDefault(studio =>
string.Equals(serialInfo.Studio.Name.Trim(), studio.Name, StringComparison.InvariantCultureIgnoreCase));
Producer existingProducer = _context.Producers.FirstOrDefault(producer =>
string.Equals(serialInfo.FullInfo.Producer.Name.Trim(), producer.Name, StringComparison.InvariantCultureIgnoreCase));
if (existingStudio != null)
{
serialInfo.Studio = existingStudio;
}
if (existingProducer != null)
{
serialInfo.FullInfo.Producer = existingProducer;
}
_context.Serials.Add(serialInfo);
await _context.SaveChangesAsync();
return CreatedAtAction("GetSerialInfo", new {id = serialInfo.Id}, serialInfo);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вопрос перекочевал с этого поста stackoverflow Нужно поправить запрос под Firebird 20