使用视图模型:根据 id 分配对象
Using View Model : Assigning an object based on id
我有以下模型 classes 和一个视图模型。我需要将 Option 分配给具有 OptionID 值的对象和 TechnicalCharacteristic 以及 id TCID,即我需要从 TechnicalCharacteristic 中检索特定行,其中 id = TCID,并从 Option 中检索行,其中 id = OptionID。
技术特点
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>
我想要达到的目标
A table 我在其中获取 tcSet 中所有元素的列表 TcSet.TechnicalCharacteristicID == TCID.
我在我的代码中尝试了一些变体,但 none 产生了任何结果。
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);
我不确定 ViewModel 是否是实现相同目标的正确方法。除了列出 TcSet 之外,我还需要为在另一个模型 class 中完成的 TcSet 赋值。
根据您的评论,我认为您不需要 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);
我有以下模型 classes 和一个视图模型。我需要将 Option 分配给具有 OptionID 值的对象和 TechnicalCharacteristic 以及 id TCID,即我需要从 TechnicalCharacteristic 中检索特定行,其中 id = TCID,并从 Option 中检索行,其中 id = OptionID。
技术特点
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>
我想要达到的目标
A table 我在其中获取 tcSet 中所有元素的列表 TcSet.TechnicalCharacteristicID == TCID.
我在我的代码中尝试了一些变体,但 none 产生了任何结果。
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);
我不确定 ViewModel 是否是实现相同目标的正确方法。除了列出 TcSet 之外,我还需要为在另一个模型 class 中完成的 TcSet 赋值。
根据您的评论,我认为您不需要 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);