我想要实现的目标非常简单。首先通过代码,我希望允许用户拥有一系列联系人。他们每个人都有以下选择:"无","尚未遇到","客户"。我正在寻找的是将所选的选项添加到数据库并检索其值。
问题是我不太清楚如何正确设置关系。或者我不知道我执行的查询是否实际上正在管理关系。
我追求的方法很简单:我创建了一个下拉列表(基于字典),它从" ExposureResult"中检索数据。 table(我之前提到的选项所在的表:None,No encounter yet,Client),并在Contacts创建表单中向用户显示。
提交后,它会从" ExposureResult"中提供行的ID。 table,我会将它插入到ExposureResultID(这是我认为我设置为关系的属性),所以我可以稍后调用它。
稍后我执行以下查询:
var query = from c in dbs.ContactsDB where c.IboID == uid select c;
return query;
其中dbs.ContactsDB是Contacts模型的DB Context我已经实现并检索了我所照顾的所有值。
查询变量将返回IEnumerable中的模型。
然后,在.cshtml文件中我会这样称呼它:
@foreach(模型中的var项目){
item.ExposureResult }
但是它不会给我带来我期待的结果,这会得到ID值在ExposureResult中引用的内容,而不是ID本身。
这是模特
该模型如下:
public class Contacts
{
[HiddenInput(DisplayValue=false)]
[Key]
public int ContactsID { get; set; }
[HiddenInput(DisplayValue=false)]
public int IboID { get; set; }
public string Name { get; set; }
[Display(Name="First Time Met")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public string FirstMeet { get; set; }
public string Phone { get; set; }
[Display(Name="Date of Contact")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? DateOfContact { get; set; }
public string Comments{ get; set; }
[Display(Name="Next Exposure")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? NextExposure { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Next Exposure 2")]
public DateTime? NextExposure2 { get; set; }
//This is analogue to SelectedQ from Ibo Model
//The main purpose is to receive the incoming data from the SelectList
[NotMapped]
public string SelectedResult { set; get; }
[Display(Name = "Result")]
public int ExposureResultID { get; set; }
public virtual ICollection<ExposureResults> ExposureResult {get; set;}
//public virtual ICollection<ExposureResults> ExposureResults { get; set; }
public virtual ICollection<Ibo> Ibo { get; set; }
}
public class ExposureResults
{
public int ID { get; set; }
public string ExposureResult { get; set; }
}
我正在制作一张图片,以便更好地解释我想要实现的目标:
答案 0 :(得分:0)
如果我真的明白你的意思,你需要包括&#34; ExposureResult&#34;查询的属性,并将外键属性添加到ExposureResults类。
//include
dbs.ContactsDB.Include("ExposureResult") or dbs.ContactsDB.Include(er => er.ExposureResult)
public class ExposureResults {
public int ID { get; set; }
public string ExposureResult { get; set; }
//foreign key property
public int ContactsID
}
有关详细信息,请参阅此article。
我希望有所帮助!
答案 1 :(得分:0)
我设法做到了。我也在ASP.NET论坛中发布了这个问题和答案:
http://forums.asp.net/p/2014225/5798579.aspx?p=True&t=635498275668626346&pagenum=1
这就是:
首先,我将创建一个int属性,无论我想要什么名字。在这种情况下,为了保持一致性,我决定创建以下属性:
public int ExposureResultID { get; set; }
此属性将是具有ExposureResult表/模型的引用行的外键。但这还不够。实体框架不会通过魔法知道这实际上是外键。
然后我们添加以下属性:
[ForeignKey("ExposureResultID")]
public virtual ExposureResult ExposureResult { get; set; }
正如您所看到的,我添加了&#34; ExposureResult&#34; type,表示将具有我想要引用的数据的表/ model / class(外表)。
请注意我已经加下划线并加粗了&#34;虚拟&#34;关键词。说得这么做是必要的。这将允许延迟加载工作。
然后,如您所见,它具有Data Annotation属性&#34; Foreign Key&#34;。这是您告诉Entity Framework谁是外键的地方。在我的例子中,我声明的属性是:ExposureResultID:
然后,将模型传递给视图,并运行foreach循环:
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item.ExposureResult.ExposureResults)
}
这将使延迟加载工作!