シンプルなマスター/ディテール関係をsqliteデータベースに書き込むことで、私はEF7の周りを見据えようとしています。保存が正常に動作します、しかし、読み込みが私に頭痛を与える:ここで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);
}
}
は、既存のデータベースからの読み込み読み込みマスターレコードは正常ですが、詳細レコードセットポインタはnullのままです。
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で作業していましたが、これまでにこの問題があったことはありません。これはレイジーローディングの問題ですか? LINQステートメントを使って子レコードを取得しようとしましたが、どちらも助けにはなりませんでした。しかし、すべてがデータベースでよく見えます。
ありがとう、もう少し私はグーグルであったはずです、別のものがあります:http://ef.readthedocs.io/en/latest/querying/related-data.html – zeroc8