繁体   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