EF代码首先是许多一对一的关系

时间:2015-09-04 10:45:02

标签: c# entity-framework wcf

我开始使用EF Code-First和WCF服务,并遇到了一个问题我无法解决这个问题的所有指南:

我得到了以下代码结构

[DataContract]
public class Feed
{
    public int Id { get; set; }
    public int LanguageId { get; set; }
    public int CategoryId { get; set; }
    public int TypeId { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Description { get; set; }
    [DataMember]
    public FeedCategory Category { get; set; }
    [DataMember]
    public FeedType Type { get; set; }
    [DataMember]
    public string FeedUrl { get; set; }
    [DataMember]
    public Language Language { get; set; }
}

[DataContract]
public class FeedCategory
{
    public int Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    public DateTime Registered { get; set; }

    [DataMember]
    public IList<Feed> Feeds { get; set; }
}

[DataContract]
public class FeedType
{
    public int Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    public DateTime Registered { get; set; }

    public IList<Feed> Feeds { get; set; }
}

[DataContract]
public class Language
{
    public int Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string CountryName { get; set; }
    [DataMember]
    public string CountryCode { get; set; }
    [DataMember]
    public string ShortCountryCode { get; set; }
}

但是当我想要获取所有Feed时,所有依赖项都不会被接收,因此类别类型&amp; 语言为空,我不知道如何解决它。

还有其他人知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

我会根据自己的经验尝试正确回答您的问题(因为我的公司不再使用EF了。)

首先,您可能需要将密钥应用于您的实体。我在OnModelCreating方法中做到了这一点。

modelBuilder.Entity<FeedType>().HasKey(k => k.Id );

其次我相信您必须在OnModelCreating方法中设置这些实体之间的映射。

modelBuilder.Entity<FeedType>().HasRequired<Feed>(h => h.Feed).WithOptional(x => x.FeedType);

最后,您需要启用预先加载或在查询中使用.Include,以便在父项时检索子对象。

所有更正都欢迎,因为它已经有一段时间了。