2015-09-04 151 views
0

我开始制作经验的EF代码优先也WCF服务,并遇到一个问题,我不能和所有关于这个问题的解决指南:EF代码优先许多一对一的关系

我得到了下面的代码结构

[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; } 
} 

但是,当我想所有的饲料,所有的依赖将不被接收,所以类别类型 & 语言是零,我没有想法如何 解决这个问题。

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

回答

1

我打算根据我的经验正确回答你的问题(从前不久,因为我的公司不再使用EF)。

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

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

其次,我认为你必须设置这些实体也能在你的OnModelCreating方法做之间的映射。

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

最后你需要启用预先加载或使用在.include上查询以便当父为子对象被检索。

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

+0

非常感谢!我无法将代码应用于模型构建器(第二个代码不能编译),但包含是我错过的=) –