2009-03-07 3 views
1

Я развиваю StudentApp в .NET 3.5 SP1 MVC Application.Как получить внешний ключ в Entity Framework?

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

  1. курс
    CourseID, COURSE_NAME
  2. Студенты
    studentID, student_Name, courseID (Ф.К.)

Теперь я сделал StudentApp.dbml, который оказывает как таблица как объекты.

Как иностранный ключ не будет присутствовать в студенческой сущности, Я не могу отобразить CourseID в студенческой модели, более того, я не могу создавать, редактировать, просматривать списки.

Так скажите мне, как отобразить курс курса (fk) у ученика &.

И также раскрывающийся список с указанием имени учебного заведения & Сохранение курсаID в режиме редактирования.

+0

Вы уверены, что используете Entity Framework? Файлы сопоставления DBML для Linq to Sql – RobS

+0

ops, вы были правы, это была Entity Framework – Vikas

+0

Пожалуйста, отредактируйте вопрос, чтобы он имел смысл. L2S и EF обрабатывают внешние ключи * полностью * по-разному. –

ответ

1

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

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

С вашей целью является найти coursename то уже доступен с Student.Course.course_Name.

+0

ya спасибо. Я уже использовал LINQ to SQL класс. Моя цель - показать объект Student в представлении, в котором отображается вся запись. , так что я поставил выше код, так как я использую архитектуру MVC ..? – Vikas

+0

Vikas: Это зависит от того, какую стратегию вы используете с вашим MVC. В моем MVC я создаю класс репозитория (это объект шаблона репозитория) в модели, которая возвращает материал в целом, который я хочу получить из базы данных. И тогда у меня есть класс обслуживания, который дополнительно фильтрует то, что я хочу из репозитория. – Spoike

0

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

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

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

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

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

+0

StudentApp.dbml - это модель данных Entity. так что в студенческом столе CourseID не будет отображаться. Сопоставление считается ассоциацией. более Я использую архитектуру MVC. Я добавляю индексный указатель ученика, чтобы он наследовал от StudentApp.model , который является автоматически созданным классом по структуре Entity. – Vikas

+0

поэтому я не получу идентификатор курса в модели .... , так что же мне делать? – Vikas

0

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

2

Я уверен, что вам нужно загрузить внешнюю ссылку для каждого объекта. Поскольку я понятия не имею, как вы создали свой 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() ,

Смежные вопросы