0

我在 EF 4.3.1 中工作,并且在插入方面一切都进行得很好。但现在我正试图将我插入的对象拉回来以显示在我的 MVC3 项目的视图中并遇到问题。

在我的 DAL 中,我有以下方法Church从数据库中获取对象:

public virtual TEntity GetById(object id)
{
    return _db.Find(id);
}

对象本身如下所示:

public class Church
{
    //Basic Properties
    public int Id { get; set; }
    public string Name { get; set; }
    public string Website { get; set; }

    ... (some properties)

    //Church Contacts and Services
    public List<Contact> Contacts { get; set; }
    public List<Service> Services { get; set; }

    ....

}

注意最后两个属性:联系人和服务。每个都是我数据库中的 1:Many 表。不过,它似乎Find()没有返回任何内容。它只是将这两个属性设置为空。

数据库模式,由 CF 实体框架自动生成

数据库中的实际条目看起来就像我期望的那样。每个教会都有一些与之相关的联系人和服务。然而,它永远不会映射回模型......

有什么想法吗?

编辑是的,看起来直到我明确告诉它才加载这些属性。我通过将它添加到我的 ChurchRepository 来修改我的查询(从 GenericRepository 继承)

public override Church GetById(object id)
{
    return _db.Include("Contacts").Include("Services").FirstOrDefault(c => c.Id == (int)id);
}
4

1 回答 1

0

您应该将导航属性标记为虚拟,或者您也可以在不延迟加载的情况下包含它们,这是最佳实践。

尝试这个

db.Churces.Include(entity=>entity.Services).
Include(entity=>entity.Contacts).SingleOrDefault(entity=>entity.Id == id)

您可能必须System.Data.Entity为 Include 扩展方法导入命名空间。

于 2012-06-30T19:15:10.257 回答