[英]How can I get a value from this navigation property?
实体框架的新知识,这让我感到困惑。 我有3个类别“候选”,“网站”和“ WebsiteType”。 候选人与网站有一对多的关系。 WebsiteType纯粹是用于存储要访问的网站类型的查找表。 我可以为候选人返回网站集合,但无法弄清楚如何获取存储在WebsiteType中的Name属性。
这是3类:
Candidate.cs
public partial class Candidate
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Candidate()
{
this.Websites = new HashSet<Website>();
}
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string MiddleInitial { get; set; }
public string NickName { get; set; }
public string PhotoUrl { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public Nullable<int> NumberOfSignatures { get; set; }
public Nullable<bool> IncludesSupplementalFiling { get; set; }
public string Bio { get; set; }
public Nullable<int> NumberOfVotes { get; set; }
public Nullable<int> Percentage { get; set; }
public Nullable<int> CategoryId { get; set; }
public Nullable<int> OfficeId { get; set; }
public Nullable<int> PoliticalPartyId { get; set; }
public virtual Category Category { get; set; }
public virtual Office Office { get; set; }
public virtual PoliticalParty PoliticalParty { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Website> Websites { get; set; }
}
Website.cs
public partial class Website
{
public int WebsiteId { get; set; }
public string Url { get; set; }
public Nullable<int> WebsiteTypeId { get; set; }
public Nullable<int> CandidateId { get; set; }
public virtual Candidate Candidate { get; set; }
public virtual WebsiteType WebsiteType { get; set; }
}
WebsiteType.cs
public partial class WebsiteType
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public WebsiteType()
{
this.Websites = new HashSet<Website>();
}
public int WebsiteTypeId { get; set; }
public string SiteName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Website> Websites { get; set; }
}
下面是我用来访问数据并将项目投影到我的DTO的代码。 同样,我的目标是从WebsiteType返回“名称”属性以及我的网站集合。 有人能指出我正确的方向吗?
public CandidateDetailsDTO GetCandidateDetails(int id)
{
db.Configuration.LazyLoadingEnabled = false;
var candidate = (from w in db.Websites
join c in db.Candidates on w.CandidateId equals c.Id
join wt in db.WebsiteTypes on w.WebsiteTypeId equals wt.WebsiteTypeId
select new CandidateDetailsDTO
{
Id = c.Id,
LastName = c.LastName,
FirstName = c.FirstName,
Bio = c.Bio,
Address = c.Address,
CategoryName = c.Category.CategoryName,
PoliticalParty = c.PoliticalParty.PartyName,
Office = c.Office.OfficeName,
Websites = w.Candidate.Websites
}).FirstOrDefault(c => c.Id == id);
最后,这是我的DTO课程:
public class CandidateDetailsDTO
{
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string MiddleInitial { get; set; }
public string NickName { get; set; }
public string PhotoUrl { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string Bio { get; set; }
public string CategoryName { get; set; }
public string PoliticalParty { get; set; }
public string Office { get; set; }
public ICollection<Website> Websites { get; set; }
}
我想知道如何从我的网站集中从WebsiteType返回“ SiteName”属性。 任何帮助,将不胜感激。
如果您使用代理服务器(目前是默认值),请确保使用包含功能-.Include(“ Websites.WebsiteType”)。 如果要将实体作为属性存储在自己的DTO中并传递给您,则可能只想禁用代理即可。
请参阅此处以获取更多信息-https: //msdn.microsoft.com/zh-cn/library/jj574232(v=vs.113).aspx
所以更像这样:
var candidate = (from curCandidate in db.Candidates.Include("Category").Include("PoliticalParty").Include("Office").Include("Websites").Include("Websites.WebsiteType")
where curCandidate.Id == id
select new CandidateDetailsDTO
{
Id = curCandidate.Id,
LastName = curCandidate.LastName,
FirstName = curCandidate.FirstName,
Bio = curCandidate.Bio,
Address = curCandidate.Address,
CategoryName = curCandidate.Category.CategoryName,
PoliticalParty = curCandidate.PoliticalParty.PartyName,
Office = curCandidate.Office.OfficeName,
Websites = curCandidate.Candidate.Websites
}).FirstOrDefault();
仔细观察,您可能在“网站”位上有一个错误(本质上是Candidate.Candidate.Websites,并且我在您的EF类中没有看到CandidateID属性),可能应该只是curCandidate.Websites
而不是curCandidate.Candidate.Websites
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.