EF7读取主要详细记录

时间:2016-07-28 10:50:50

标签: entity-framework

我试图通过在sqlite数据库中编写一个简单的主 - 详细信息关系来了解EF7。保存工作正常,阅读但令我头疼:

以下是我的实体:

public class Message
{
    public int MessageId { get; set; }
    public string Name { get; set; }        
    public List<MessagePart> MessageParts { get; set; }
}
public class MessagePart
{
    public int MessagePartId { get; set; }
    public string Text { get; set; }        
    public int MessageId { get; set; }
    public Message Message { get; set; }
}

createMessage()完成它应该做的事情:

static void createMessages()
    {
        using (var db = new TestContext())
        {
            var m1 = new Message
            {
                Name = "train_arrives_in_x_minutes",                    
                MessageParts = new List<MessagePart>()
                {
                    new MessagePart {
                        Text = "Train arrives in 5 minutes"                            
                    },
                    new MessagePart {
                        Text = "Zug faehrt in 5 Minuten ein",                            
                    }
                }
            };
            var m2 = new Message
            {
                Name = "train_out_of_service",
                MessageParts = new List<MessagePart>()
                {
                    new MessagePart {
                        Text = "train is out of service"                            
                    },
                    new MessagePart {
                        Text = "Kein Service auf dieser Strecke",                            
                    }
                }
            };

            db.Messages.Add(m1);
            db.Messages.Add(m2);

            var count = db.SaveChanges();
            Console.WriteLine("{0} records saved to database", count);

        }
    }

从现有数据库读取精确读取主记录,但详细记录集指针保持为空。

static void readMessages()
    {
        using (var db = new TestContext())
        {
            foreach (Message m in db.Messages)
            {
                Console.WriteLine(m.Name);
                // exception here: m.MessageParts is always null
                foreach(MessagePart mp in m.MessageParts)
                {
                    Console.WriteLine("mp.Text={0}", mp.Text);
                }                    
            }                
        }
    }

我有什么办法可以强制加载这些消息部分吗?我之前曾与其他(Python)ORM合作过,之前从未遇到过这个问题。这是Lazy Loading的问题吗?我尝试使用LINQ语句获取这些子记录,这也没有帮助。但是数据库中的一切看起来都不错。

1 个答案:

答案 0 :(得分:2)

如果要启用LazyLoading,则需要启用 LazyLoading (默认情况下应启用)并使您的属性虚拟

(['IbCommisions.ib_id' => $this->userid OR 'Users.country_id' => $this->request->data['country']])

你的模特看起来像:

public TestContext() 
    : base(Name = "ConntextionName")
{
    this.Configuration.ProxyCreationEnabled = true;
    this.Configuration.LazyLoadingEnabled = true;
}

如果您不想使用LazyLoading,可以使用预先加载来加载相关实体:

public class Message
{
    public int MessageId { get; set; }
    public string Name { get; set; }        
    public virtual ICollection<MessagePart> MessageParts { get; set; }
}
public class MessagePart
{
    public int MessagePartId { get; set; }
    public string Text { get; set; }        
    public int MessageId { get; set; }
    public virtual Message Message { get; set; }
}

有关详细信息,请查看this site