Entity Framework - Code Сначала используются пользовательские конструкторы для множества отношений - PullRequest
0 голосов
/ 19 октября 2011

Поскольку я проводил исследования по определению отношений «многие ко многим» с Code First, я предполагаю, что пользовательские конструкторы в классах сущностей нужны только для того, чтобы иметь возможность создавать новый экземпляр сущности плюс n: m.сущность, связанная с ATCE.

На данный момент мои классы определены следующим образом:

public class Person
{
    public Person()
    {
        Events = new HashSet<Event>();
    }

    public int PersonId { get; set; }
    public virtual ICollection<Event> Events { get; set; }
}

public class Event
{
    public Event()
    {
        Persons = new HashSet<Person>();
    }

    public int EventId { get; set; }
    public virtual ICollection<Person> Persons { get; set; }
}

Однако, если мое приложение никогда не предложит возможность создать нового человека во время созданияновое событие, могу ли я просто опустить пользовательский конструктор для событий?

public class Event
{   
    public int EventId { get; set; }
    public virtual ICollection<Person> Persons { get; set; }
}

Будет ли работать соотношение «многие ко многим» по-прежнему нормально?

1 Ответ

1 голос
/ 22 октября 2011

Если вы сделаете это, вы получите исключение NullReferenceException при создании нового события и попытке добавить к нему Persons.

var @event = new Event();
event.Persons.Add(new Person()); //NullReferenceException here

, что является единственной причиной для этого конструктора инициализировать коллекции.

вы можете лениво инициализировать коллекцию Persons внутри геттера при первом доступе, но вы должны быть осторожны с многопоточностью.

...