Sto usando Entity Framework 4.3, POCO, base di dati prima e sto ottenendo il seguente errore:Come aggirare l'errore "Provider di dati .NET Framework interno 1025."?
errore Provider interno di dati .NET Framework 1025.
DOMANDA: Credo che la mia domanda esprime il mio intento, ma mi sembra di colpire questo errore, quindi mi chiedo se qualcuno sa come potrei strutturare la mia query in modo diverso per aggirare questo errore?
Ecco lo scenario ...
Ho un database SQL Server 2008, che ha 2 tavoli - A e B:
Un
- Aid (int - non null - identità - chiave primaria)
- AName (nvarchar (10) - non null)
B
- BID (int - non nullo - identità - chiave primaria)
- SomeName (nvarchar (10) - non nullo)
- Aid (int - non nullo - chiave esterna di collegamento per aiutare nella tabella a)
poi definisco contesto in questo modo:
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; }
}
e le classi di entità in questo 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; }
}
Ora per la query ...
Quello che voglio è tutto il come, dove ogni "B SomeName" è nella lista dei nomi fornito in modo faccio questo:
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());
essere chiari su quello che voglio dire, se i dati della tabella si presenta così:
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
Mi aspetterei di tornare A1, A2 e A4 (in modo che la chiamata di conteggio sopra restituisca 3).
Hai guardato in eccezione interna? –
L'eccezione interna è nulla :-( – kmp
names.Contains non è un codice valido, non è sicuro di come compila. Sospetto che tu voglia utilizzare Intersect() invece di All(). –