簡體   English   中英

如何從該導航屬性獲取值?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM