EF 6: две коллекции одного и того же типа [дубликаты]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

7
задан Nikolay Kostov 3 February 2015 в 20:49
поделиться

4 ответа

Есть два способа сделать это:

сначала: использовать тег или перечисления в объекте Person

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
    public bool IsFaculty { get; set; }
}

или

public enum PersonType { Teacher, Student }; 

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
    public PersonType PropPersonType { get; set; }
}

second: рабочий объект, ориентированный с наследованием. Этот метод имеет мои предпочтения, потому что его легко управлять и расширять, если вы хотите его расширить.

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
}


public class Student : Person
{
    public int Year { get; set; }
    // other student related fiels.
}


public class Teacher : Person
{
    public List<Course> Courses { get; set; }
    // other teacher related fields
}

Ваш Group затем

public class Group
{
    public int Id {get;set;}
    public ICollection<Teacher> Teachers { get; set; }
    public ICollection<Student> Students { get; set; }
}
8
ответ дан KarelG 19 August 2018 в 04:45
поделиться

Чтобы учителя и ученики в двух отдельных таблицах наследовали от абстрактной базы:

public abstract class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Group Group { get; set; }
}

public class Student : Person
{
    public int Year { get; set; }
    // other student related fiels.
}

public class Teacher : Person
{
    public List<Course> Courses { get; set; }
    // other teacher related fields
}

public class Group
{
    public int Id {get;set;}
    public ICollection<Teacher> Teachers { get; set; }
    public ICollection<Student> Students { get; set; }
}
-1
ответ дан Boris Zinchenko 19 August 2018 в 04:45
поделиться

Разделяйте в двух разных классах, а затем наследуйте их обоих с Лицом, потому что все учителя и ученики - это люди, но не все. Лица - это учителя и ученики.

public class Person
{
}

public class Teacher : Person
{
}

public class Student : Person
{
}

Надеюсь, это поможет

1
ответ дан Oscar Bralo 19 August 2018 в 04:45
поделиться
  • 1
    Да, я рассматривал это как вариант, но я действительно хотел бы избежать его, если это возможно. – Toodleey 25 March 2014 в 09:47
  • 2
    Хорошо @ Toodleey! ;) – Oscar Bralo 25 March 2014 в 09:50

Я думаю, вам нужен какой-то флаг, чтобы отличить их (я не могу поверить вам, что не могу). И после того, как вы сможете использовать TPH метод наследования. Подробнее здесь здесь и здесь .

0
ответ дан Tony 19 August 2018 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: