使用EF选择对象及其属性

时间:2012-06-30 19:07:37

标签: c# asp.net-mvc-3 entity-framework

我在EF 4.3.1中工作,在插入方面一切都很顺利。但是现在我试图将我插入的对象拉出来在我的MVC3项目的View中显示并遇到问题。

在我的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()不会返回任何此类内容。它只是将两个属性设置为null。

Database Schema, autogenerated by CF Entity Framework

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

有什么想法吗?

编辑是的,看起来它没有加载这些属性,直到我明确告诉它。我通过将其添加到我的ChurchRepository(继承自GenericRepository)

来修改我的查询
public override Church GetById(object id)
{
    return _db.Include("Contacts").Include("Services").FirstOrDefault(c => c.Id == (int)id);
}

1 个答案:

答案 0 :(得分:0)

您应该将导航属性标记为虚拟,或者也可以包含它们而不进行延迟加载,这是最佳做法。

试试这个

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

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