2016-10-19 2 views
0

Извините, если на это уже был дан ответ, я не могу найти ответ в соответствии со своим сценарием.MVC - EF - Множественное сопоставление внешних ключей

У меня есть класс сущности и модель представления. Пример ниже:

Entity:

public class Data 
{ 
    [Key, Column(Order = 0)] 
    public int ID { get; set; } 

    [Column(Order = 1)] 
    public Q1Values Q1 { get; set; } 

    [Column(Order = 2)] 
    public Q1Values Q2 { get; set; } 

} 

ViewModel:

public class DataViewModel 
{ 
    [Key, Column(Order = 0)] 
    public int ID { get; set; } 

    [Column(Order = 1)] 
    public int Q1ID { get; set; } 

    [Column(Order = 2)] 
    public int Q2ID { get; set; } 

    public List<Q1Values> Q1ValuesList {get;set;} 

} 

Проблема у меня есть, что я буду иметь более 50 вопросов, все же, используя поиск по таблице 'Q1Values'. Проблема с вышеизложенным заключается в том, что перед вставкой мне придется вручную загрузить/сопоставить объекты FK из модели viewmodel в модель сущности.

Я попытался ниже с моделью зрения

public class DataViewModel 
{ 
[Key, Column(Order = 0)] 
public int ID { get; set; } 

[Column(Order = 1)] 
public Q1Values Q1ID { get; set; } 

[Column(Order = 2)] 
public Q1Values Q2ID { get; set; } 

public List<Q1Values> Q1ValuesList {get;set;} 

} 

Я затем отображается в раскрывающемся меню, как показано ниже

@Html.DropDownListFor(m=>m.Q1.ID, new SelectList(model.Q1Values,"ID","Name")) 

Но это еще требует от меня на карте, чтобы полностью загруженном объекта в контроллере поскольку он будет содержать только идентификатор.

Какова наилучшая практика для этого? Нужно ли мне отображать полный объект в контроллере для каждого вопроса? Похоже, что его многократно дублирует.

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

public class QOLData 
{ 
    [Key, Column(Order = 0)] 
    public int ID { get; set; } 

    [Column(Order = 1)] 
    public int Q1 { get; set; } 

    [Column(Order = 2)] 
    public int Q2 { get; set; } 

    [ForeignKey("Q1,Q2")] 
    public virtual Q1Values Q1Values { get; set; } 
} 

ответ

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