2015-10-05 64 views
0

我有以下模型類和視圖模型。我需要使用OptionID和TechnicalCharacteristic的值來爲Option賦值TCID,即我需要從TechnicalCharacteristic中檢索特定行,其中id = TCID,並從Option中選擇其中id = OptionID的行。使用視圖模型:根據ID分配對象

技術特點

public class TechnicalCharacteristic 
{ 
    public int TechnicalCharacteristicID { get; set; } 
    [Display (Name = "Technical Characteristic Name")] 
    public string TCName { get; set; } 
    [Display (Name = "Description in English")] 
    public string DescriptionEN { get; set; } 
    [Display (Name = "Description in German")] 
    public string DescriptionDE { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public DateTime ModifiedOn { get; set; } 
    public string CreatedBy { get; set; } 
    public string ModifiedBy { get; set; } 

    public virtual ICollection<TcSet> TcSets { get; set; } 
    //public virtual ICollection<Option> Options { get; set; } 
} 

選項

public class Option 
{ 
    public int OptionID { get; set;} 
    [Display (Name = "Option Type")] 
    //[Remote("DuplicateOptionName", "Options", HttpMethod = "POST", ErrorMessage = "Option Name already Exists", AdditionalFields = "")] 
    public string OptionName { get; set; } 
    [Display (Name ="Description in English")] 
    public string DescriptionEN { get; set; } 
    [Display(Name = "Description in German")] 
    public string DescriptionDE { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public DateTime ModifiedOn { get; set; } 
    public string CreatedBy { get; set; } 
    public string ModifiedBy { get; set; } 

    public int TechnicalCharacteristicID { get; set; } 
    public int LsystemID { get; set; } 

    public virtual ICollection<OptionValue> OptionValues { get; set; } 
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; } 
    public virtual Lsystem Lsystem { get; set; } 
    // public virtual ICollection< SetValue> SetValue { get; set; } 
} 

選項值

public class OptionValue 
{ 
    public int OptionValueID { get; set; } 
    [Display(Name = "Option Value")] 
    public string OptionVal { get; set; } 
    [Display (Name="Created By")] 
    public string CreatedBy { get; set; } 
    [Display(Name = "Created On")] 
    public DateTime CreatedOn { get; set; } 
    [Display(Name = "Modified By")] 
    public string ModifiedBy { get; set; } 
    [Display(Name = "Modified On")] 
    public DateTime ModifiedOn { get; set; } 
    public int OptionID { get; set; } 
    // public int SetValueID { get; set; } 

    public virtual Option Option { get; set; } 
    public virtual ICollection< SetValue> SetValue { get; set; } 
} 

TcSet

public class TcSet 
{ 
    public int TcSetID { get; set; } 
    [Display (Name = "Property name")] 
    public string SetName { get; set; } 
    [Display(Name = "PhysicalUnit")] 
    public string PhysicalUnit { get; set; } 
    [Display (Name = "Data Usage")] 
    public DataUsage DataUsage { get; set; } 
    [Display (Name = "Data Status")] 
    public DataStatus DataStatus { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public DateTime ModifiedOn { get; set; } 
    [Display (Name = "Description in German")] 
    public string DescriptionDE { get; set; } 
    [Display (Name = "Description in English")] 
    public string DescriptionEN { get; set; } 
    public string CreatedBy { get; set; } 
    public string ModifiedBy { get; set; } 

    public int TechnicalCharacteristicID { get; set; } 
    public int DataFormatID { get; set; } 

    public virtual ICollection<SetValue> SetValues { get; set; } 
    public virtual DataFormat DataFormat { get; set; } 
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; } 
} 

視圖模型

public class AddOptionValue 
{ 
    public virtual OptionValue OptionValue { get; set; } 
    public virtual SetValue SetValue { get; set; } 
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; } 
    public virtual Option Option { get; set; } 
    public virtual IEnumerable<TcSet> TcSets { get; set; } 
} 

控制器

public ActionResult AddOptionValue (int OptionID, int TCID) 
    { 
     var viewModel = new AddOptionValue(); 
     var option = db.Option.Include(x=>x.OptionID).FirstOrDefault(x => x.OptionID == OptionID); 
     var tc = db.TechnicalCharacteristic.Include(x => x.TCName).FirstOrDefault(x => x.TechnicalCharacteristicID == TCID); 
     var TcSet = db.TechnicalCharacteristic.Include(x => x.TcSets).FirstOrDefault(x=>x.TechnicalCharacteristicID==TCID); 
     if(option!=null&&TcSet!=null) 
     { 
      viewModel.Option = option; 
      viewModel.TechnicalCharacteristic = tc; 
      viewModel.TcSets = TcSet.TcSets; 
     } 
     return View(viewModel); 
    } 

查看

@model TEDALS_Ver01.ViewModels.AddOptionValue 
@{ 
ViewBag.Title = "AddOptionValue"; 
} 

<h2>Add Option Value</h2> 

<table> 
<tr> 
    <th> Option Name</th> 
    <th> Technical Characteristic</th> 
    <th></th> 
</tr> 
<tr> 
    <td>@Model.Option.OptionName</td> 
    <td>@Model.TechnicalCharacteristic.TCName</td> 
</tr> 
@foreach (var item in Model.TcSets) 
{ 
    <tr> 

     <td>item.SetName</td> 
    </tr> 
} 
</table> 

我想實現

一個表,我得到的所有元素的列表tcSet TcSet.TechnicalCh aracteristicID == TCID。

我已經在我的代碼中嘗試了一些變體,但沒有得到任何結果。

An exception of type 'System.InvalidOperationException' occurred in EntityFramework.SqlServer.dll but was not handled in user code 
Additional information: A specified Include path is not valid. The EntityType 'TEDALS_Ver01.DAL.Option' does not declare a navigation property with the name 'OptionID'. 

是我上線

var option = db.Option.Include(x=>x.OptionID).FirstOrDefault(x => x.OptionID == OptionID);  

有我不知道的錯誤,如果視圖模型是實現同樣正確的方法。除了TcSet的列表外,我還需要爲在另一個模型類中完成的TcSet分配值。

+1

爲什麼這個問題倒投票? – Vini

+0

這不值得downvote國際海事組織,但你應該澄清你的代碼你已經嘗試了什麼樣的變體,以及哪個特定的代碼行引發異常(我也假設它是NullReferenceException) – ken2k

+0

我可以編輯代碼與變化我試過。我避免了它,只是爲了確保問題不是那麼冗長。而錯誤是InvalidOperationException。我有另一個變體的NullRefernceException。我可以編輯我的問題。 – Vini

回答

1

我不認爲你需要的Include()根據您的評論,你只需要從價值提供的ID選項,你可以刪除它,但如果你想要的選項值,那麼做到這一點:

var option = db.Option.Include(x => x.OptionValues).FirstOrDefault(x => x.OptionID == OptionID); 

或不OptionValues

var option = db.Option.FirstOrDefault(x => x.OptionID == OptionID); 
+0

這個特定的控制器用於添加'OptionValues' – Vini

+0

第一個代碼示例用於獲取選項的所有選項值,這不是您所需要的嗎? – Ric

+0

我只是想將視圖模型中的選項分配給數據庫的行,其中id是相同的# – Vini

相關問題