Платформа объекта - как добавить к Entites с навигационными свойствами

Другие соответственно объяснили, какова статическая библиотека, но я хотел бы указать на некоторые протесты пользования статическими библиотеками, по крайней мере, в Windows:

  • Одиночные элементы: , Если что-то должно быть глобальным/статичным и уникальным, быть очень осторожным относительно помещения его в статической библиотеке. Если несколько DLLs будут связаны против той статической библиотеки, то они каждый получат свою собственную копию одиночного элемента. Однако, если Ваше приложение является единственным EXE без пользовательского DLLs, это не может быть проблемой.

  • Не имеющее ссылки удаление кода: , Когда Вы связываетесь против статической библиотеки, только части статической библиотеки, на которые ссылается Ваш DLL/EXE, будут связаны в Ваш DLL/EXE.

    , Например, если mylib.lib содержит a.obj и b.obj и Ваш DLL/EXE только ссылочные функции или переменные от a.obj, полнота b.obj будет отброшена компоновщиком. Если b.obj будет содержать глобальные / статические объекты, их конструкторы и деструкторы не будут выполняться. Если у тех конструкторов/деструкторов есть побочные эффекты, Вы можете быть разочарованы их отсутствием.

    Аналогично, если статическая библиотека содержит специальный entrypoints, Вы, возможно, должны заботиться, что они на самом деле включены. Примером этого во встроенном программировании (хорошо, не Windows) был бы обработчик прерываний, который отмечен как являющийся в определенном адресе. Также необходимо отметить обработчика прерываний как entrypoint, чтобы удостовериться, что это не становится отброшенным.

    Другое последствие этого - то, что статическая библиотека может содержать объектные файлы, которые абсолютно неприменимы из-за некорректных ссылок, но она не вызовет ошибку компоновщика, пока Вы не сошлетесь на функцию или переменную от тех объектных файлов. Это может произойти еще долго после того, как библиотека записана.

  • Отладочные символы: можно хотеть отдельный PDB для каждой статической библиотеки, или можно хотеть, чтобы отладочные символы были помещены в объектные файлы так, чтобы они были прокручены в PDB для DLL/EXE. Документация Visual C++ объясняет необходимые опции .

  • RTTI: можно закончить с [приблизительно 116] объекты для того же класса при соединении единственной статической библиотеки в несколько DLLs. Если Ваша программа предполагает, что type_info "одноэлементные" данные и используют &typeid() или type_info::before(), можно получить нежелательные и неожиданные результаты.

9
задан 8 July 2009 в 23:25
поделиться

1 ответ

Самый простой способ - выполнить запрос для связанных сущностей и использовать свойства навигации:

т.е.

Product p = new Product{
   ID = 5,
   Name = "Bovril",
   Category = ctx.Categories.First( c => c.ID == 5)
};
ctx.AddToProducts(p);
ctx.SaveChanges();

Если вы хотите избежать запроса к базе данных, то, вероятно, проще всего использовать сущность-заглушка, например

// this is a stub, a placeholder for the real entity
Category c = new Category {ID = 5}; 
// attach the stub to the context, similar to do a query
// but without talking to the DB
ctx.AttachTo("Categories", c);
Product p = new Product{
   ID = 5,
   Name = "Bovril",
   Category = c
};
ctx.AddToProducts(p);
ctx.SaveChanges();

. Если вам нужна дополнительная помощь по этой технике заглушки, ознакомьтесь с этой записью в блоге по этой теме.

15
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

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