1

C#で最初の4.3のエンティティフレームワークコードを使用しています

次のクラスを受講しました。

Class A
{
public string Name { get; set; }
public List<B> Bs { get; set; }
}

Class B
{
public string Name { get; set; }
}

AからBへの1対多の実現があります。AからBリストをロードしようとすると、リストの最初の要素のみが取得されます。

次のコードを実行すると、a2には両方のbが含まれていると思いますが、実際には1つしか含まれていません。誰かが問題を見つけるのを手伝うことができますか?

B b = new B() {Name = "b"};
A a = new A() {Name = "a", 
Bs = new List<B>() { new B() {Name = "b1"}, new B() {Name = "b2"} };

using (var context = new MyContext())
{
context.As.Add(a);
context.SaveChanges();
}
using (var context = new MyContext())
{
var a2 = (from a in context.As.Include(a => a.Bs)
        where a.Name == "a"
        select a).Single();
}

ありがとう

4

1 に答える 1

1

実際のコードを投稿できますか?投稿したコードはコンパイルされませんが、一部の角かっこと変数の命名に若干の変更が加えられていますが、予想どおり、a2には両方のBが含まれているため、結果は異なります。問題はどこかにあるかもしれません。コンソールアプリ全体は次のとおりです。

public class A
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<B> Bs { get; set; }
}

public class B
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Model : DbContext
{
    public DbSet<A> As { get; set; }
    public DbSet<B> Bs { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var b = new B() { Name = "b" };
        var a1 = new A()
            {
                Name = "a",
                Bs = new List<B>() { new B() { Name = "b1" }, new B() { Name = "b2" } }
            };

        using (var context = new Model())
        {
            context.As.Add(a1);
            context.SaveChanges();
        }
        using (var context = new Model())
        {
            var a2 = (from a in context.As.Include(a => a.Bs)
                      where a.Name == "a"
                      select a).Single();

            Console.WriteLine(a2.Bs.Count);
        }

        Console.ReadLine();
    }

}
于 2012-10-15T13:14:31.343 に答える