Estoy utilizando el Entity Framework 4.3, POCO, la base de datos primero y yo estoy recibiendo el siguiente error:Cómo evitar "Error interno del proveedor de datos de .NET Framework 1025."?
error del proveedor de datos interna .NET 1025. Marco
PREGUNTA: Creo que mi consulta expresa mi intención, pero parece que estoy alcanzando este error, entonces me pregunto si alguien sabe cómo podría estructurar mi consulta de manera diferente para evitar este error.
Aquí está el panorama ...
que tienen una base de datos de SQL Server 2008 que tiene 2 mesas - A y B:
Un
- ayuda (int - no null - identity - clave principal)
- AName (nvarchar (10) - not null)
B
- Oferta (int - no null - identidad - clave primaria)
- somename (nvarchar (10) - no nulo)
- ayuda (int - no null - clave externa de conexión para ayudar en la tabla a)
entonces definir el contexto de esta manera:
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; }
}
y las clases de entidad de este modo:
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; }
}
Ahora para la consulta ...
Lo que quiero es toda la medida en que cada "B somename" está en la lista de nombres suministrada por lo hago esto:
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());
ser claro acerca de lo que quiero decir, si los datos de la tabla es el siguiente:
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
Esperaría recuperar A1, A2 y A4 (de modo que la llamada al recuento anterior devolvería 3).
¿Has mirado en la excepción interna? –
La excepción interna es nulo :-( – kmp
names.Contains no es un código válido, no estoy seguro de cómo se compila. Sospecho que quiere utilizar Intersect() en lugar de All(). –