Обычно что-то подобное не является проблемой для объекта, а скорее для потребителя объекта, такого как ViewModel.Организация-участник должна располагать подробной информацией или связями, чтобы оценить, подтверждено это или нет.Кажется необычным, что подтверждение будет связано с участником с помощью псевдонима, а не идентификатора участника.
Не зная больше о структуре таблицы, учитывая только детали, которые вы раскрыли:
[Table("participants")]
public class participant
{
[Key]
public int ID { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
[ForeignKey("Confirmations")]
public string alias { get; set; }
public virtual ICollection<ParticipantConfirmations> Confirmations { get; set; } = new List<ParticipantConfirmation>();
}
[Table("confirmedParticipants")]
public class ParticipantConfirmation
{
[Key]
public string alias { get; set; }
public bool is_confirmed { get; set; }
// etc.
}
Затем при чтении модели представления для Участника:
[Serializable]
public class ParticipantViewModel
{
public int ID { get; set; }
public string FullName { get; set; }
public string Alias { get; set; }
public bool IsConfirmed { get; set; }
}
типичный Выбор:
var participantVMs = db.Participants.Where(x => /* some condition */)
.Select(x => new ParticipantViewModel
{
ID = x.ID,
FullName = x.firstname + " " + x.lastname,
Alias = x.alias,
IsConfirmed = x.Confirmations.Any(c => c.is_confirmed)
}).ToList();
Ключевой момент об EF ...
Избегайте подобных вещейthis:
.Where(x => x.is_confirmed == true && x.participantAlias == "aliashere").ToList().Count > 0;
Вместо этого используйте:
.Any(x => x.is_confirmed && x.participantAlias == "aliashere");
Первый оператор будет эффективно делать SELECT * FROM [Participant_Confirmed] WHERE is_confirmed = true AND participant_alias = 'aliashere'
, который будет возвращать все поля для всех соответствующих строк просто, так что вы можете проверить, чтобы увидетьесли строка существует.
Второй оператор будет эффективно выполнять SELECT EXISTS ...
, который будет возвращать результат True или False, который является более быстрым запросом с использованием меньшего количества памяти, и отправляет намного меньше данных по сети.
По догадкам из названий и полей может показаться, что подтвержденные участники будут видеть, как участники сглаживают, подтвержден участник или нет.Если бы это было так, я бы просто использовал сущность, связанную с этим представлением, для операции чтения, а затем загружал Участника, если / когда я хотел обновить данные об участнике.Трудно определить, не видя всей картины, но я подозреваю, что есть некоторые значительные оптимизации, которые вы можете использовать, чтобы избежать слишком частого обращения к БД.