C # .Net MVC Для нестатического поля, метода или свойства требуется ссылка на объект

#c# #asp.net-mvc #ado.net-entity-data-model #datamodel

#c# #asp.net-mvc #ado.net-entity-data-model #модель данных

Вопрос:

Я новичок в C # и не могу найти решение с помощью поиска

У меня есть модель базы данных (EDM)

Я создал файл класса в папке models:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace photostorage.Models
{
    public class PhotosRepository
    {
        private fotostorageEntities db = new fotostorageEntities();

        public IEnumerable<photos> FindUserPhotos(string userid)
        {
            return from m in db.photos
                   select m;
        }

        public photos GetPhotosById(int photoid)
        {
            return db.photos.SingleOrDefault(d => d.id == photoid);
        }
    }
}
  

Затем был создан контроллер для этой модели:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using photostorage.Models;

namespace photostorage.Controllers
{
    public class PhotosController : Controller
    {
        //
        // GET: /Photos/
        public ActionResult ViewPhoto(string userid, int photoid)
        {
            photos CurrentPhoto = PhotosRepository.GetPhotosById(photoid);
            if (CurrentPhoto == null)
                return View("NotFound");
            else
                return View("ViewPhoto", CurrentPhoto);
        }
    }
}
  

В результатах я получаю ошибку: ссылка на объект требуется для нестатического поля, метода или свойства photostorage.Модели.Хранилище фотографий.GetPhotosById(int);

Имя таблицы в базе данных — photos EDM ConnectionStrings name — fotostorageEntities

Нужна помощь, потому что я действительно не знаю решения.

Ответ №1:

В данный момент вы вызываете GetPhotosById как статический метод. Вам нужно будет создать экземпляр PhotosRepository .

     public ActionResult ViewPhoto(string userid, int photoid)
    {
        PhotosRepository photosRepository = new PhotosRepository();
        photos CurrentPhoto = photosRepository.GetPhotosById(photoid);
        if (CurrentPhoto == null)
            return View("NotFound");
        else
            return View("ViewPhoto", CurrentPhoto);
    }
  

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

1. Спасибо! Ваш отказ помог мне!

Ответ №2:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using photostorage.Models;

namespace photostorage.Controllers
{
    public class PhotosController : Controller
    {
        PhotosRepository objPhotosRepository = new PhotosRepository();
        //
        // GET: /Photos/
        public ActionResult ViewPhoto(string userid, int photoid)
        {
            photos CurrentPhoto = objPhotosRepository.GetPhotosById(photoid);
            if (CurrentPhoto == null)
                return View("NotFound");
            else
                return View("ViewPhoto", CurrentPhoto);
        }
    }
}