Как ПОЛУЧИТЬ две модели в одном контроллере веб-api?

#c# #asp.net-web-api2

#c# #asp.net-web-api2

Вопрос:

Итак, у меня есть две таблицы в моей БД: engineer и engineerSettings. В настоящее время у меня есть контроллер как для api / username, так и для api / UserSettings, но я также хочу иметь контроллер api / UserInformation, который возвращает все в username, а также UserSettings. Я не совсем уверен, как это сделать, но прямо сейчас у меня есть новая модель для пользовательской информации

 public class userInformation
{
    public virtual ICollection<Username> Usernames {get;set;}
    punlic virtual ICollection<UserSetting> UserSettings {get;set;}
}
  

И в моем контроллере UserInformation у меня есть

 .... 
//GET
public IEnumerable<UserInformation> GetUserInformation()
{
    return db.UserInformations;
}
  

Что на самом деле не работает, поэтому мне было интересно, как решить эту проблему?

Комментарии:

1. Что не работает?

2. Я получаю тип объекта UserInformation не является частью модели для текущей контекстной ошибки, и я попытался добавить modelBuilder.Entity<UserInformation>().ToTable("UserInformation") в свой dbcontext, но все равно получаю ту же ошибку.

3. Посмотрите в своем классе контекста. Он должен быть определен для его использования.

4. Да, я уже определил это, public virtual DbSet<UserSetting> UserSettings { get; set; }

5. FWIW, Visual Studio (если это то, что вы используете) предлагает несколько простых методов устранения неполадок в вашем коде. Они были очень полезны в поиске решений вопросов, не найденных в SO. Первый включает в себя щелчок правой кнопкой мыши в крайнем левом углу строки кода для метода, который не работает, и запуск его в локальной отладке, ваш VS должен быть настроен для символов. Второй метод включает в себя создание . ТЕСТИРУЕТ проект, ссылаясь на ваш основной проект и добавляя методы как [TestMethod], иногда вы получаете гораздо более подробную информацию об ошибках, чем в вашем browser. HTH.

Ответ №1:

Заполните свою модель:

 public UserInformation GetUserInformation()
{
        UserInformation UserInfo= new UserInformation();
        List<Username> lstUsername= new List<Username>();
        List<UserSetting> lstUserSetting= new List<UserSetting>();
        lstUserSetting=db.UserSettings.ToList();
        lstUsername=db.Usernames.ToList();
        UserInfo.Usernames =lstUsername;
        UserInfo.UserSettings =lstUserSetting;
        return UserInfo;
}
  

Комментарии:

1. Да. Спасибо! Я знал, что это не так просто, как я думал. 🙂

2. Как бы я сказал, если имена пользователей и пользовательские настройки имеют общий «идентификатор», как мне вернуть только имена пользователей и пользовательские настройки этого идентификатора?

3. для выбора одного пользователя с идентификатором пользователя db.Usernames.Where(m => m.ID == userID).FirstOrDefault();