实体框架模型问题

时间:2015-08-19 20:38:42

标签: c# entity-framework

我遇到了一些奇怪的问题,我试图从数据库中取出一条记录,而且似乎大部分都是null,我甚至知道我是否手动查看已填充的数据库。

模型

public class AdminConfiguration : Entity // Entity is an abstract class containing an ID
{
    public bool Authentication { get; set; }
    public List<ApplicationConfiguration> ApplicationConfiguration { get; set; }
    public List<LinksConfiguration> LinksConfiguration { get; set; }
    public EmailConfiguration EmailConfiguration { get; set; }
    public bool WakeOnLan { get; set; }
}

基本上对另一个类的任何引用都是null唯一填充的是WakeOnLan属性。

查询

    public AdminConfiguration Find(int id)
    {
        return Db.AdminConfiguration.Find(id);
    }

我有一种感觉,我对如何设置模型有误解。我期待查询返回一个完全填充的AdminConfiguration对象。

2 个答案:

答案 0 :(得分:2)

尝试将导航属性设置为虚拟以启用延迟加载:

public virtual List<ApplicationConfiguration> ApplicationConfiguration { get; set; }

请参阅https://msdn.microsoft.com/en-us/data/jj193542.aspx

  

这启用了Entity Framework的延迟加载功能。懒   加载意味着这些属性的内容将是   尝试访问时自动从数据库加载。

答案 1 :(得分:1)

设置模型的最佳方法是:

public class AdminConfiguration : Entity // Entity is an abstract class containing an ID
{
    public AdminConfiguration()
    {
        this.ApplicationConfigurations = new HashSet<ApplicationConfiguration>();
        this.LinksConfigurations = new HashSet<LinksConfiguration>();
    }
    public bool Authentication { get; set; }
    public EmailConfiguration EmailConfiguration { get; set; }
    public bool WakeOnLan { get; set; }

    // Navigation properties
    public virtual ICollection<ApplicationConfiguration> ApplicationConfigurations { get; set; }
    public virtual ICollection<LinksConfiguration> LinksConfigurations { get; set; }
}