Как обойти «Внутреннюю ошибку 1025 поставщика данных .NET Framework»?

Я использую Entity Framework 4.3, POCO, сначала база данных, и я получаю следующую ошибку:

Внутренняя ошибка поставщика данных .NET Framework 1025.

ВОПРОС: Я думаю, что мой запрос выражает мое намерение, но, похоже, я попал эта ошибка, поэтому мне интересно, знает ли кто-нибудь, как я могу по-другому структурировать свой запрос, чтобы обойти эту ошибку?

Вот сценарий ...

У меня есть база данных SQL Server 2008, в которой есть 2 таблицы - A и B:

A

  • AId (int - не null - идентификатор - первичный ключ)
  • AName (nvarchar (10) - not null )

B

  • BId (int - не null - идентификатор - первичный ключ)
  • SomeName (nvarchar (10) - not null)
  • AId (int - не null - внешний ключ, подключающийся к AId в таблица A)

Затем я определяю контекст следующим образом:

public class DatabaseContext : DbContext
{
    public DatabaseContext(string name)
        : base(name)
    {
        Configuration.AutoDetectChangesEnabled = false;
        As = Set<A>();
        Bs = Set<B>();
    }

    public DbSet<A> As { get; private set; }
    public DbSet<B> Bs { get; private set; }
}

И классы сущностей, например, так:

public class A
{
    public int AId { get; set; }
    public string AName { get; set; }
    public virtual ICollection<B> Bs { get; private set; }

    public void AddB(B b)
    {
        if (b == null)
        {
            throw new ArgumentNullException("b");
        }

        if (Bs == null)
        {
            Bs = new List<B>();
        }

        if (!Bs.Contains(b))
        {
            Bs.Add(b);
        }

        b.A = this;
    }
}

public class B
{
    public int BId { get; set; }
    public A A { get; set; }
    public string SomeName { get; set; }
}

Теперь о запросе ...

Я хочу, чтобы все As, где каждое "B SomeName" "находится в списке предоставленных имен, поэтому я делаю следующее:

var names = new[] {"Name1", "Name2"};

var ctx = new DatabaseContext("EFPlayingEntities");
var res = ctx.As.Where(a => a.Bs.Select(b => b.SomeName).All(names.Contains));

// Here I evaluate the query and I get:
//   Internal .NET Framework Data Provider error 1025.
Console.WriteLine(res.Count());

Чтобы прояснить, что я имею в виду, если данные таблицы выглядят так:

AId,AName
1,A1
2,A2
3,A3
4,A4

BId,SomeName,AId
1,Name1,1
2,Name2,1
3,Name1,2
4,Name1,3
5,Name3,3
6,Name1,4
7,Name2,4

Я ожидал бы получить обратно A1, A2 и A4 (так что подсчет вызов выше вернет 3).

5
задан kmp 1 March 2012 в 09:17
поделиться