Добавление класса в список ICollection - PullRequest
0 голосов
/ 19 января 2020

У меня есть проект C#, в котором пользователи могут входить в систему и создавать доски объявлений. У класса пользователя есть ICollection для перечисления всех плат, созданных указанным пользователем c, и я пытаюсь выяснить, как добавить эту доску в список.

Это два класса, класс User :

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string UserType { get; set; }
    public DateTime LastLoginDate { get; set; }
    public virtual ICollection<Board> Boards { get; set; }
    public virtual ICollection<Post> Posts { get; set; }

И это класс доски:

public class Board
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime DateCreated { get; set; }
    public virtual ICollection<Post> Posts { get; set; }

Цель состоит в том, чтобы у каждого пользователя был список всех добавленных досок, которые он создал, поэтому необходимо, чтобы доска была добавлена ​​в этот список при ее создании. Это веб-форма, где можно добавить доску:

public partial class AddBoard : System.Web.UI.Page
{
    Board boardToAdd = new Board();
    User user = new User();
    Utility utility = new Utility();

    static User loggedInUser;


    protected void CreateButton_Click(object sender, EventArgs e)
    {
        string name = NameTextBox.Text;
        loggedInUser = (User)Session["loggedInUser"];

        string checkName = utility.CheckBoardName(name);
        if (checkName == "OK")
        {
            boardToAdd.Name = name;
            boardToAdd.DateCreated = DateTime.Now;
            user.AddBoard(boardToAdd, loggedInUser);
            boardToAdd.AddBoard(boardToAdd);


        }
        else
        {
            CreateLabel.Text = checkName;
        }
    }

И это метод в классе пользователя, который я пытался использовать для добавления доски в список:

public User AddBoard(Board board, User user)
    {
        BulletinContext _context = new BulletinContext();
        user.Boards.Add(board);
        return null;

    }
}

Для дополнительной информации это метод в классе доски, который я вызываю для добавления доски:

public bool AddBoard(Board board)
    {
        BulletinContext _context = new BulletinContext();
        try
        {
            _context.Boards.Add(board);
            _context.SaveChanges();
            return true;
        }
        catch
        {
            return false;
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 19 января 2020

Как сказал Pieter21, переменная _context в Board.AddBoard() воссоздается при каждом вызове Board.AddBoard(). Насколько я вижу, _context должно быть stati c и объявлено вне метода AddBoard() (так как вам, вероятно, потребуется доступ к нему позже).

0 голосов
/ 19 января 2020

Мне удалось решить проблему. Я просто добавил код в свой метод, чтобы вызвать пользователя, к которому добавлялась доска, и добавляемую доску. Теперь это выглядит так:

public User AddBoard(Board board, User user)
    {
        BulletinContext _context = new BulletinContext();
        User _user = _context.Users.Find(user.ID);
        Board _board = _context.Boards.Find(board.ID);
        _user.Boards.Add(_board);
        _context.SaveChanges();
        return null;

    }

Необходимо вызвать этот метод из другого метод, который добавляет доску в класс Board так, чтобы это происходило впоследствии.

0 голосов
/ 19 января 2020

В вашей AddBoard вы добавляете в локальную переменную.

После выхода из функции это уничтожается.

Продвигайте свой _context члену класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...