Старый ответ при условии вашего отношения 1: 1:
Прокрутите вниз, чтобы получить ответ на свое разъяснение.
Вот два способа добиться этого, один из них - удалить перекрестную ссылку , применив 1: N .
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Picture Logo { get; set; }
}
public class Note
{
public int ID { get; set; }
public string Text { get; set; }
}
public class Picture
{
public int ID { get; set; }
public string Path { get; set; }
}
Это действительно дешевое решение, вы, вероятно, не хотите больше заметок или фотографий, чем люди ...
Итак, используйте Аннотации данных , чтобы указать внешний ключ, это сохранит навигацию и 1: 1 .
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Picture Logo { get; set; }
}
public class Note
{
[Key, ForeignKey("Person")]
public int OwnerID { get; set; }
public string Text { get; set; }
public virtual Person Owner { get; set; }
}
public class Picture
{
[Key, ForeignKey("Person")]
public virtual int OwnerId { get; set; }
public string Path { get; set; }
public virtual Person Owner { get; set; }
}
Как видите, из-за отношения 1: 1 картинка и заметка будут использовать один и тот же идентификатор. Если ваш ключ не имеет имени ID, вам нужно добавить KeyAttribute , в этом случае мы также добавим ForeignKeyAttribute .
Обратите внимание, что вы должны использовать virtual
, чтобы вещи загружались только по запросу, вы, скорее всего, не захотите, чтобы база данных запрашивала информацию об изображении, если вам нужно только имя человека.
Свойства ассоциации, помеченные как virtual
, будут по умолчанию загружаться с отложенной загрузкой. Это означает, что если вы извлекаете сущность Product, информация о ее категории не будет извлекаться из базы данных до тех пор, пока вы не получите доступ к ее свойству Category (или если вы явно не укажете, что данные категории должны извлекаться при написании запроса LINQ для извлечения Товарный объект).
* 1 035 * & mdash;
Скотт Гу - Использование EF Code First с существующей базой данных
Новый ответ относительно вашего разъяснения:
Продолжаем строить внешние ключи, возвращаясь к структуре 1: N с ICollection<T>
; как только вы наберете своего человека, например var boss = Person.Find(BossID)
, вы сможете получить доступ к boss.Pictures
, в котором будут различные изображения. Вы также можете назначить boss.Logo
одной из этих картинок.
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Picture Logo { get; set; }
public ICollection<Picture> Pictures { get; set; }
public ICollection<Note> Notes { get; set; }
}
public class Note
{
public int ID { get; set; }
[ForeignKey("Person")]
public int OwnerID { get; set; }
public string Text { get; set; }
public virtual Person Owner { get; set; }
}
public class Picture
{
public int ID { get; set; }
[ForeignKey("Person")]
public virtual int OwnerId { get; set; }
public string Path { get; set; }
public virtual Person Owner { get; set; }
}