[英]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.