#c# #orm #entity-relationship
#c# #orm #сущность-отношение
Вопрос:
Мне нужно знать, как реализовать взаимосвязь в модели без использования Entity Framework на C #.
Пожалуйста, дайте мне решение, используя эту диаграмму ER.
class Student
{
public int studentId { get; set; }
public string studentName { get; set; }
public DateTime DOB { get; set; }
public string street { get; set; }
public string city { get; set; }
public string state { get; set; }
public string PIN { get; set; }
public int courseId { get; set; }
public string courseName { get; set; }
}
class Course
{
public int courseId { get; set; }
public string courseName { get; set; }
}
class StudentHobby
{
public int studentId { get; set; }
public string studentName { get; set; }
public string hobby { get; set; }
}
class Lecturer
{
public int lecturerId { get; set; }
public string lecturerName { get; set; }
public int courseId { get; set; }
public string courseName { get; set; }
}
Комментарии:
1. ПОКАЖИТЕ НАМ , что ВЫ уже пробовали! SO — это не бесплатный сервис «напиши мой код за меня» — ВАМ сначала нужно приложить усилия, показать нам, что у вас есть и где вы застряли — тогда мы поможем …..
2. Я совершенно новичок в программировании. Я могу писать код, но дело в том, что я хочу изучить наилучшую практику.
3. Что ж, тогда начните с кодирования четырех объектов, которые вы показываете на диаграмме ER, как классов C #, и разместите их здесь — тогда мы сможем сделать еще один шаг и представить взаимосвязи
4. Я не знаю, как работать с внешним ключом в модели… Нужно ли мне иметь отдельные свойства или я могу вызвать класс… Я сомневаюсь в этих
5. Почему вы специально исключаете Entity Framework здесь? Это намного упростило бы задачу…..
Ответ №1:
В принципе, ваши классы сущностей всегда должны содержать
-
их собственные «полезные» данные — например, атрибуты этой сущности, такие как имя и другая информация о самом лекторе
-
атрибуты внешнего ключа для ссылки на другие объекты, например
CourseId
, но не более того
Основной принцип реляционного проектирования заключается в том, чтобы убедиться, что у вас есть ваши отношения на месте, и вы устраняете все дублирования данных -> например, не сохраняйте CourseName
с Lecturer
классом, поскольку если бы вы это сделали, то при изменении названия курса вам пришлось бы начать обновлять его не только в Course
таблице, но и во всех экземплярах Lecturer
и, возможно, Student
строках, которые используют этот курс. Это именно то, чего вы пытаетесь избежать.
Идея заключается в следующем: с атрибутом внешнего ключа, CourseId
хранящимся в Lecturer
, если вы загружаете лектора, вы также можете взять атрибут FK, а затем также загрузить соответствующий Course
и получить все его детали — без необходимости дублировать информацию по нескольким таблицам / сущностям.
Если бы вы подумали об использовании Entity Framework, вы могли бы очень легко включить эти ссылки fk в качестве «свойств навигации» в свои классы:
public class Lecturer
{
// Lecturer's own attributes
public int lecturerId { get; set; }
public string lecturerName { get; set; }
// FK attribute
public int courseId { get; set; }
// FK navigation property
public virtual Course Course { get; set; }
}
и тогда «магия EF» автоматически выполнит эту «загрузку» в фоновом режиме.
Теперь в вашем коде вы могли бы загрузить Lecturer
, и, перейдя по его Course
свойству навигации, вы также можете получить доступ ко всем деталям Course
— без дублирования каких-либо данных.