我有以下模型類和視圖模型。我需要使用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分配值。
爲什麼這個問題倒投票? – Vini
這不值得downvote國際海事組織,但你應該澄清你的代碼你已經嘗試了什麼樣的變體,以及哪個特定的代碼行引發異常(我也假設它是NullReferenceException) – ken2k
我可以編輯代碼與變化我試過。我避免了它,只是爲了確保問題不是那麼冗長。而錯誤是InvalidOperationException。我有另一個變體的NullRefernceException。我可以編輯我的問題。 – Vini