Я недавно задал вопрос , и, откровенно говоря, исходя из полученного ответа, я второй раз угадываю всю свою стратегию / как я проектирую классы и базу данных.
У меня естьЯ еще не использовал ни ключевое слово virtual, ни Icollection ни в одном из моих проектов Entity Framework, и, откровенно говоря, после чтения об этом в , в некоторых примерах я не до конца понимаю, зачем это нужно или какэто работает.
В примере приложения у меня есть простой дизайн, где есть три списка - люди, заметки и картинки.Отношения таковы, что у человека может быть несколько заметок и картинок, а также у людей с логотипом, который является картиной.
public class Person
{
public int ID { get; set; }
public string name { get; set; }
public Picture logo { get; set; }
}
public class Note
{
public int ID { get; set; }
public string Text { get; set; }
public Person Owner { get; set; }
}
public class Picture
{
public int ID { get; set; }
public string Path { get; set; }
public Person Owner { get; set; }
}
Когда я хочу выбрать список заметок, которыми владеет человек, япросто выполните db.Notes.Where(x=>x.owner=="y")
на объекте заметок.Я думаю, что понимаю, что если бы я использовал Icollection в классе person, я мог бы вместо этого выполнить что-то вроде db.person.select(x=> x.notes)
, чтобы получить все заметки.Правильно ли я верю в это мышление?
Если бы вы были на моем месте с относительно простым примером выше, как бы вы создавали классы (включая ICollection, виртуальные или что-то еще)?
Кроме тогои что наиболее важно, приведенное выше является лишь примером, однако в моем реальном приложении я использовал очень похожую структуру, где я использую свой пользовательский тип в качестве «соединителя» / внешнего ключа.
Во многих примерах я имеючитал, (в приведенном выше примере) они будут использовать public int OwnerID
вместо public person Owner
.Это действительно бросило меня, и я подвергаю сомнению всю мою стратегию EF.В чем различия?
Буду признателен за любой совет.