0

私は 3 つのモデルをセットアップしました。最初にコードを作成しました。関係は機能しているように見えますが、1 つが問題を引き起こしています。

Article クラス、Language クラス、Edition クラスがあります

public class Article
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Icon { get; set; }
}

public class Language
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
}

public class Edition
{
    public int ID { get; set; }
    public Article Article  { get; set; }
    public Language Language { get; set; }

    public string Title { get; set; }        
    public string Details { get; set; }
}

私のブートストラップ/DBinitialiser では、オブジェクトを作成し、それらを適切に設定できます。DB が作成され、Language と Article の外部キーが両方とも Edition テーブルに存在し、正しく入力されます。

var engLang = new Language() {Code="en", Name="English Language"};
var altLang = new Language() {Code="xx", Name="Alternative Language"};
db.Languages.Add(engLang);
db.Languages.Add(altLang);
db.SaveChanges();

var testArt = new Article() { Name = "test" };
db.Articles.Add(testArt);
db.SaveChanges();

db.Editions.Add(new Edition(){Article = testArt, Language = engLang, Title="English Content"});
db.Editions.Add(new Edition(){Article = testArt, Language = altLang, Title="Alternative Content"});
db.SaveChanges();

Edition を照会してそれらのリストを返すことができるようになりましたが、Language 属性は常に NULL です。Article 属性は正常に機能します。

 var query = db.Editions.Where(r => r.Article.ID == Article.ID);

 foreach (Edition item in query)
 {
    // item.Language => NULL
    // item.Article => {Object Article}         
 }

私は .net と Entity-Framework を初めて使用するので、なぜこのエラーが常に発生するのかわかりません。r => r.Language.ID == 1 でクエリを実行しても、Edition オブジェクトの NULL 属性を取得できます。

4

2 に答える 2

1

EF codefirst を正しい方法で使用していることを確認してください。ここでいくつかのあいまいさがあります。POCO で実際に存在する必要がある関係を決定する必要があります。次のようにクラスを変更します。

public class Article
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public string Icon { get; set; }
}

public class Language
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
}

public class Edition
{
    [Key]
    public int ID { get; set; }
    public virtual Article Article  { get; set; }
    public virtual Language Language { get; set; }

    public string Title { get; set; }        
    public string Details { get; set; }
}
于 2013-01-03T19:33:21.370 に答える
1

モデルをより明確に記述できるようにしてくれた AmirHossein Mehrvarzi に感謝します。このエラーは、クエリの結果を反復処理する際のエンティティの遅延読み込みが原因であると考えています。ref: Entity Framework: この Command に関連付けられた開いている DataReader が既に存在します

有効にせずに、 Includeステートメントを linq にMultipleActiveResultSets追加しただけです

var query = db.Editions.Where(r => r.Article.ID == Article.ID).Include(r => r.Language);

foreach (Edition item in query)
{
    // item.Language => {Object Language}
    // item.Article => {Object Article}         
}
于 2013-01-04T09:52:54.780 に答える