Как получить внешний ключ в Entity Framework? - PullRequest
1 голос
/ 07 марта 2009

Я занимаюсь разработкой StudentApp в приложении .NET 3.5 SP1 MVC.

У меня есть две таблицы

  1. Курс
    CourseID, имя_курса
  2. Студенты
    studentID, student_Name, courseID (fk)

Теперь я создал StudentApp.dbml, в котором обе таблицы являются сущностями.

Поскольку внешний ключ не будет присутствовать в студенческом объекте, Я не могу отобразить courseID в модели студента, более того, я не могу генерировать добавления, редактирования, представления списка.

Итак, скажите мне, как отобразить courseID (fk) у студента, и я также хочу вместо этого название курса.

А также раскрывающийся список с названием курса и сохранением идентификатора курса в режиме редактирования.

Ответы [ 4 ]

2 голосов
/ 10 марта 2009

Я почти уверен, что вы должны загрузить внешнюю ссылку для каждой сущности. Поскольку я понятия не имею, как вы создали свой API, мне придется привести пример с псевдокодом, но я думаю, что это то, что вам нужно сделать.

List<Students> studList = [your_db_facade].SelectStudents() // Or however you retrieve your students

foreach (Students singleStudent in studList)
    singleStudent.Context.CourseReference.Load() //CourseReference.Load() should be in the framework

Затем вы получаете CourseID и имя от единственного студенческого субъекта, например

singleStudent.Course.CourseID
singleStudent.Course.course_Name

Для вас это может выглядеть несколько иначе, но я думаю, что ключ к решению вашей проблемы - CourseReference.Load ().

1 голос
/ 07 марта 2009

Если вы используете LINQ-to-SQL и создали файл DBML в Visual Studio, то внешние ключи могут быть перечислены через свойство Course в объекте Student (генерируется автоматически, так как он является однозначным много отношений от Student). Вроде как это:

var studentCourseIds =
    from s in context.Students
    select s.Course.CourseID;

Поскольку ваша цель - найти имя курсора, тогда оно уже доступно с помощью Student.Course.course_Name.

0 голосов
/ 07 марта 2009

если вы создадите правильные отношения в базе данных SQL-сервера, то при добавлении таблиц в ваш DBML-конструктор отношения также будут скопированы и ваш код будет автоматически связываться.

0 голосов
/ 07 марта 2009

Можете ли вы опубликовать свой DBML? Кроме того, DBML используется в LINQ to SQL (L2S) - EDMX - это отображение, используемое в ADO Entity Framework. Используете ли вы LINQ to SQL или Entity Framework (EF)?

Независимо от того, какой из них вы используете - они оба поддерживают внешние ключи, и вы получите свойство, представляющее любую сторону отношения - вам не нужно делать ничего особенного (внешний ключ должен существовать в базе данных, конечно ).

В EF внешние ключи называются «свойствами навигации», и они работают немного иначе, чем внешние ключи в L2S. Ничего особенного, но их обновление и «энергичная загрузка» несколько отличаются.

Просто перетащите таблицы на карту в конструкторе в Visual Studio (или создайте с использованием эквивалентов командной строки, если хотите).

Относительно иностранных ключей и выпадающих списков (и других достоинств пользовательского интерфейса) - я написал пару записей в блоге о некоторых подходах, которые могут вас устроить. Одна часть расположена здесь , а вторая часть расположена здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...