Я пытаюсь использовать MongoDB в сочетании с ядром. net (c#), чтобы сохранить некоторые результаты опроса.
Сложность в том, что я планирую сделать его как можно более обобщенным c, чтобы позже можно было добавить другие элементы управления рейтингом.
Я могу сохранять разные типы результатов в одной таблице.
public class VoteBase
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public User User { get; set; }
public Control Control { get; set; }
public string ControlType { get; set; }
}
public class VoteStarRatingControl : VoteBase
{
public int? Rating { get; set; }
}
public class VoteStarRatingWithComment : VoteStarRatingControl
{
public string Comment { get; set; }
}
Я создал таблицу базового типа как MongoCollection:
private readonly IMongoCollection<VoteBase> _voteBases;
Чтобы сохранить ее в этой коллекции, я использовал этот код (где DTO - это тот же объект передачи данных контента, чтобы отделить Служба REST из структуры БД):
List<VoteBase> dbVotes = new List<VoteBase>();
foreach (VoteBaseDTO v in votes)
{
switch (v) {
case VoteStarRatingWithCommentDTO src:
dbVotes.Add(new VoteStarRatingWithComment() { User = new User() { Id = UserId }, Control = new Control() { Id = src.ControlId }, Rating = src.Rating, Comment = src.Comment });
break;
case VoteStarRatingControlDTO sr:
dbVotes.Add(new VoteStarRatingControl() { User = new User() { Id = UserId }, Control = new Control() { Id = sr.ControlId }, Rating = sr.Rating });
break;
}
}
_voteBases.InsertMany(dbVotes);
return dbVotes;
Пока здесь все работает нормально.
Теперь я пытаюсь вернуть голоса для определенного c списка элементов управления (для одного опроса).
Следующая команда завершается неудачно с
«Элемент« Рейтинг »не соответствует ни одному полю или свойству класса SurveyToolRestAPI.Models.VoteBase. '
object obj = _voteBases.Find(vb => vb.Control.Id == "5e9c24c50a099728b027e176").SingleOrDefault();
Это потому, что он имеет тип StarRatingControl вместо типа VoteBase.
Есть ли способ получить список как динамический c вместо строго типизированного из коллекции MongoDB?