2015-03-08 5 views
1

У меня есть набор вопросов. У каждого вопроса есть ссылка на другую (следующий вопрос). Как я могу правильно понять это в модели? Я думаю, что вариантASP.NET MVC ссылка на другой объект такого же типа

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web; 

namespace TestAlibra.Models 
{ 
    public class Question 
    { 
     public int ID { get; set; } 

     [Required] 
     public string Title { get; set; } 

     public int NextQuestion { get; set; } 
    } 
} 

будет ошибочным, поскольку это не соответствует критериям EF. вариантным Также как

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web; 

namespace TestAlibra.Models 
{ 
    public class Question 
    { 
     public int ID { get; set; } 

     [Required] 
     public string Title { get; set; } 

     public int QuestionID { get; set; } 

     public virtual Question Question { get; set; } 
    } 
} 

выглядит очень странно; Я думаю, что это тоже неправильно.

Спасибо за помощь!

+0

Это похоже на дерево вопросов? вам нужно будет ограничить FK в той же таблице. что вы можете сделать, но EF не справляется с этим. – Ewan

+0

Да, дерево вопросов. Но каждый вопрос может иметь ссылку только на один вопрос. Также я думаю о создании таблицы с полями: questionID, nextQuestionID. Просто для навигации. Но я не уверен, что это хорошая идея создать таблицу именно для этого. –

+0

да, так что ваш стол будет как ваш первый объект, где NextQuestionId имеет FK Question.Id EF, который ненавидит это, потому что ему придется загружать потенциально бесконечный список объектов. Кроме того, вы хотите, чтобы NextQuesionId был нулевым, снова EF будет жаловаться. – Ewan

ответ

0

Вы должны использовать:

public class Question 
{ 
    public int ID { get; set; } 

    [Required] 
    public string Title { get; set; } 

    public int? QuestionID { get; set; } 

    public virtual Question Question { get; set; } 
} 

По именовании QuestionID будет превращена в качестве внешнего ключа.

Обратите внимание, что я изменил его на int?, потому что вам нужно, чтобы внешний ключ был нулевым, иначе было бы невозможно вставить в таблицу, которая требует ссылку на себя (как вы вставляете первый элемент?).

Этот класс является именно тем, который автоматически генерирует базу данных для вас, если вы хотите генерировать классы из базы данных.

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