Я использую Entity Framework 4.3, POCO, сначала база данных, и я получаю следующую ошибку:
Внутренняя ошибка поставщика данных .NET Framework 1025.
ВОПРОС: Я думаю, что мой запрос выражает мое намерение, но, похоже, я попал эта ошибка, поэтому мне интересно, знает ли кто-нибудь, как я могу по-другому структурировать свой запрос, чтобы обойти эту ошибку?
Вот сценарий ...
У меня есть база данных SQL Server 2008, в которой есть 2 таблицы - A и B:
A
B
Затем я определяю контекст следующим образом:
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).